NamrataSanger Ответов: 3

Почему я получаю эту ошибку? Пожалуйста, помогите мне решить эту ошибку.


private int GenerateAutoId()
   {
       con.Open();
       SqlCommand cmd = new SqlCommand("Select Count(*) from User",con);
       var temp = cmd.ExecuteReader().ToString();
       int i = Convert.ToInt32(temp);
       con.Close();
       i=i+1;
       return i;
   }


сообщение об ошибке:
[SqlException (0x80131904): Incorrect syntax near the keyword 'User'.]
   System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +2555926
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +5959200
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +285
   System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +4169
   System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() +58
   System.Data.SqlClient.SqlDataReader.get_MetaData() +89
   System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted) +430
   System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest) +2598
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry) +1483
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +64
   System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +240
   System.Data.SqlClient.SqlCommand.ExecuteReader() +99
   SignUpPage_SignUp.GenerateAutoId() in d:\SEM-4\WT\ProjectStayHealthy\StayHealthy\templates.aucreative.co\Project\SignUpPage\SignUp.aspx.cs:22
   SignUpPage_SignUp.SignUp_Click(Object sender, EventArgs e) in d:\SEM-4\WT\ProjectStayHealthy\StayHealthy\templates.aucreative.co\Project\SignUpPage\SignUp.aspx.cs:31
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9782698
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +204
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1639


Что я уже пробовал:

Я попробовал приведенный выше код, чтобы подсчитать количество пользователей в моей таблице пользователей, чтобы я мог сгенерировать уникальный идентификатор для нового пользователя, но я получаю ошибку как неправильный синтаксис рядом с пользователем.Так что кто-нибудь может помочь мне решить эту ошибку.

3 Ответов

Рейтинг:
15

F-ES Sitecore

Пользователь - это зарезервированное слово, поэтому заключите его в квадратные скобки, чтобы SQL знал, что вы имеете в виду таблицу с именем User.

SqlCommand cmd = new SqlCommand("Select Count(*) from [User]",con);


Рейтинг:
1

phil.o

Это не очень хороший способ создания уникального ключа для записи базы данных.
Вы должны полагаться на саму базу данных и использовать вместо нее автоматически сгенерированный целочисленный первичный ключ.


0x01AA

Теперь автоматически генерируемое значение имеет также некоторые недостатки. Я бы предложил более гибкую последовательность действий.

NamrataSanger

Если я не генерирую уникальный идентификатор, то он показывает мне еще одну ошибку.
код:
охраняемых недействительными SignUp_Click(объект отправителя, EventArgs в электронной)
{
CodeI строка;
против.Открыть();
SqlCommand cmd1 = new SqlCommand("Select CodeId from NumberCode where [CountryCode]='" + Code.SelectedItem + "'", con);
использование (SqlDataReader dr = cmd1.Метода executereader())
{
др.Читать();
CodeI = dr[0].Метод toString();
}
Команда sqlcommand cmd и = новая команда sqlcommand("вставить в пользовательские значения(@имя,@фамилия,@EmailId,@пароль,@MobileNumber,@CodeId,@адрес)",кон);
cmd.параметры.AddWithValue("FirstName",TextUserName.Text.Метод toString());
cmd.параметры.AddWithValue("EmailId", TextEMailId.Text);
cmd.параметры.AddWithValue("Пароль",TextConfirmPassword.Text);
cmd.параметры.AddWithValue("Фамилия",TextLastName.Text);
cmd.параметры.AddWithValue("MobileNumber",TextMobileNumber.Text);
cmd.параметры.AddWithValue("Адрес",TextAddress.Text);
cmd.параметры.AddWithValue("CodeIdd",CodeI);
УМК.Метод executenonquery();
против.Закрывать();
if(cmd.ExecuteNonQuery()<=0)
{
Ответ.Перенаправление("../Home/Home.aspx");
}
еще
{
Ответ.Перенаправление("Регистрации.aspx-файл");
}
}

сообщение об ошибке:
[SqlException (0x80131904): неверный синтаксис рядом с ключевым словом "пользователь".]
Системы.Данных.Sqlclient как.Объект sqlconnection.OnError(исключение SqlException, логическое breakConnection, действие`1 wrapCloseInAction) +2555926
Системы.Данных.Sqlclient как.SqlInternalConnection.OnError(исключение SqlException, Boolean breakConnection, Action`1 wrapCloseInAction) +5959200
Системы.Данных.Sqlclient как.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +285
Системы.Данных.Sqlclient как.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +4169
Системы.Данных.Sqlclient как.Класс sqldatareader.TryConsumeMetaData() +58
System.Data.SqlClient.SqlDataReader.get_MetaData() +89
Системы.Данных.Sqlclient как.Свойство sqlcommand.FinishExecuteReader(объект sqldatareader, ДС, RunBehavior runBehavior, строки resetOptionsString, логическое isInternal, логическое forDescribeParameterEncryption, логическое shouldCacheForAlwaysEncrypted) +430
Системы.Данных.Sqlclient как.Свойство sqlcommand.RunExecuteReaderTds(метода commandbehavior cmdBehavior, RunBehavior runBehavior, логическое returnStream, логическое асинхронный, типа int32 время ожидания задач&амп; задач, логическое asyncWrite, логическое inRetry, объект sqldatareader, ДС, логическое describeParameterEncryptionRequest) +2598
Системы.Данных.Sqlclient как.Свойство sqlcommand.RunExecuteReader(метода commandbehavior cmdBehavior, RunBehavior runBehavior, логическое returnStream, метод String, TaskCompletionSource`1 завершение, типа int32 время ожидания задач&амп; задач, логическое и amp; usedCache, логическое asyncWrite, логическое inRetry) +1483
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +64
Системы.Данных.Sqlclient как.Свойство sqlcommand.ExecuteScalar() +271
SignUpPage_SignUp.GenerateAutoId() в d:\SEM-4\WT\ProjectStayHealthy\StayHealthy\templates.aucreative.co\Project\SignUpPage\SignUp.aspx.cs:22
SignUpPage_SignUp.SignUp_Click(отправитель объекта, EventArgs e) в d:\SEM-4\WT\ProjectStayHealthy\StayHealthy\templates.aucreative.co\Project\SignUpPage\SignUp.aspx.cs:31
Системы.Веб.Пользовательского интерфейса.WebControls.Кнопка.OnClick(EventArgs e) +9782698
Системы.Веб.Пользовательского интерфейса.WebControls.Кнопка.RaisePostBackEvent(String eventArgument) +204
Системы.Веб.Пользовательского интерфейса.WebControls.Кнопка.Системы.Веб.Пользовательского интерфейса.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
Системы.Веб.Пользовательского интерфейса.Страницы.ProcessRe

Nirav Prabtani

просто заключите эту таблицу в квадратные скобки [пользователь]

Вставить в [пользовательские] значения....

Рейтинг:
0

Richard Deeming

Цитата:
var temp = cmd.ExecuteReader().ToString();
int i = Convert.ToInt32(temp);

В дополнение к необходимости квадратных скобок вокруг зарезервированного слова "пользователь", как упоминалось в решении 2 и комментариях к решению 1, вы также получите FormatException из этих двух строк.

ExecuteReader возвращает SqlDataReader. Зовущий .ToString() на что будет возвращена строка:
"System.Data.SqlClient.SqlDataReader"
Очевидно, что эта строка не может быть преобразована в целое число.

Вы должны использовать ExecuteScalar вместо.
object temp = cmd.ExecuteScalar();
int i = Convert.ToInt32(temp);
Свойство sqlcommand.Метод ExecuteScalar (System.Data.SqlClient) | Microsoft Docs[^]