为什么这个SQL查询给出了以前在C#ASP.NET中正常工作的错误?

时间:2011-09-12 11:38:20

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

我有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>

1 个答案:

答案 0 :(得分:0)

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

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

CommandString中:

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);

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