【问题标题】:Why this sql query is giving error which was previously working fine in C# ASP.NET?为什么这个 sql 查询给出以前在 C# ASP.NET 中运行良好的错误?
【发布时间】:2011-09-12 11:38:19
【问题描述】:

我有default.aspx 页面,我在其中放置了CreateUserWizard1

SqlConnection con = new SqlConnection("server=.;database=test;integrated security=true");
SqlCommand cmd = new SqlCommand();

并且,在Continue_Click 事件中,我在后面放置了这样的代码

protected void ContinueButton_Click(object sender, EventArgs e)
{
    string un = CreateUserWizard1.UserName.ToString();
    try
    {
        con.Open();

        cmd.CommandText = "create table " + un + " (id int IDENTITY(1,1) primary key,username varchar(50),fname varchar(50),mname varchar(50),lname varchar(50),mobile varchar(10),college varchar(5000),school varchar(5000),working varchar(5000),prevworking varchar(5000),skill varchar(MAX),interest varchar(MAX),achievment varchar(MAX),image varchar(MAX) default '~/image/default_male.jpg')";
        cmd.Connection = con;
        cmd.ExecuteNonQuery();

     }

    Catch (Exception a)
    {
         Response.write(a.Message);
    }
 }

以前工作正常,但现在出现错误并执行 catch 块说明

Incorrect syntax near '('.

您能帮我找出问题并给我解决方案吗?

machine.XML 的一些其他细节是

<connectionStrings>
    <add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
</connectionStrings>

<membership>
        <providers>
            <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/>
        </providers>
    </membership>

【问题讨论】:

标签: asp.net sql-server-2005 c#-4.0


【解决方案1】:

如果您的变量 un 来自不受信任的来源,那么使用它来构建命令字符串不是一个好主意。我的第一个猜测可能是,该变量的值包含您的 sql 查询的非法字符?

我认为您可以使用 SqlCommand 参数导入该值。基本上,您使用 sql 参数替换您的动态字符串构建,然后为您的命令定义:

命令字符串:

cmd.CommandText = "create table @TableName (id int IDENTITY(1,1) primary key,username varchar(50),fname varchar(50),mname varchar(50),lname varchar(50),mobile varchar(10),college varchar(5000),school varchar(5000),working varchar(5000),prevworking varchar(5000),skill varchar(MAX),interest varchar(MAX),achievment varchar(MAX),image varchar(MAX) default '~/image/default_male.jpg')";

导入参数(调用cmd.ExecuteNonQuery();之前需要这样做):

cmd.Parameters.AddWithValue("@TableName", un);

我希望这会有所帮助,如果它有任何改变,请告诉我们:)

【讨论】:

  • 我的错误,对象名称无法通过 sql 参数提供。对不起! social.msdn.microsoft.com/Forums/en-US/transactsql/thread/…
  • 在 Continue_Click() 之后,它没有得到 CreateUserWizard1.UserName.ToString() 或 HttpContext.Current.User.Identity.Name,现在甚至现有用户的登录也显示不成功。这是为什么呢?
猜你喜欢
  • 2016-03-22
  • 2020-06-04
  • 1970-01-01
  • 1970-01-01
  • 2018-03-31
  • 1970-01-01
  • 2019-09-25
  • 2020-05-02
  • 2023-04-04
相关资源
最近更新 更多