Почему этот SQL-запрос дает ошибку, которая ранее работала нормально в C # ASP.NET? - PullRequest
0 голосов
/ 12 сентября 2011

У меня есть default.aspx страница, на которой я разместил CreateUserWizard1.

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

и событие On 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 голосов
/ 12 сентября 2011

Если ваша переменная un из ненадежного источника, не рекомендуется использовать ее для построения командной строки. Мое первое предположение может состоять в том, что значение этой переменной содержит недопустимые символы для вашего sql-запроса?

Я думаю, что вы можете импортировать это значение, используя SqlCommand Parameters. По сути, вы заменяете динамическое построение строк с помощью sqlparameter, который вы затем определяете для своей команды:

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

Надеюсь, это поможет, пожалуйста, дайте нам знать, если что-то изменится:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...