Удалить C# sqlcommand: подзадность вернула более 1 значенияC#

Место общения программистов C#
Ответить
Anonymous
 Удалить C# sqlcommand: подзадность вернула более 1 значения

Сообщение Anonymous »

У меня есть ошибка, выполняющая либо удаление , либо вставка , используя C# sqlcommand ; База данных - SQL Server. < /p>
Свод SQL - < /p>

Код: Выделить всё

DELETE FROM [table_name]
WHERE id = 'some_id';
< /code>
, что довольно просто. < /p>
id
- это имя столбца с DataType varchar (15) , которое может быть null; some_id имеет 15 символов.
Во -первых, чтобы убедиться, что только 1 строка с этим идентификатором существует, был сделан этот выбор , который не возвращает ошибок

Код: Выделить всё

SELECT *
FROM [table_name]
WHERE id = 'some_id';
< /code>
Возвращает 1 строку < /p>
Ошибка в Delete < /code> IS < /p>

system.data.sqlclient.sqlexception (0x80131904): Subquery вернул более 1 значения. Это не допускается, когда подзадность следует за следующим =,! =,  = =, Или когда подпрограмма используется в качестве выражения. запрос; Очевидно, что здесь не так 
Что загадает, так это то, что выполнение того же запроса Delete 
, используя API C ODBC, нет ошибки; Таким образом, кажется, что проблема в коде C#
C# код, который вызывает Delete :

Код: Выделить всё

public int execute(string sql)
{
SqlConnection conn = new SqlConnection(conn_str);

try
{
conn.Open();

SqlCommand command = new SqlCommand(sql, conn);
command.ExecuteNonQuery();
conn.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
return -1;
}

return 0;
}
c# код, который вызывает выборы :

Код: Выделить всё

public List select(string sql)
{
Stopwatch sw = new Stopwatch();
sw.Start();

List rows = null;
SqlConnection conn = new SqlConnection(conn_str);

try
{
conn.Open();

SqlDataReader reader = null;
SqlCommand command = new SqlCommand(sql, conn);
reader = command.ExecuteReader();

int nbr_cols = reader.FieldCount;
int nbr_rows = 0;

rows = new List();

while (reader.Read())
{
nbr_rows++;
List col = new List();

for (int idx_col = 0; idx_col < nbr_cols; idx_col++)
{
string str = reader[idx_col].ToString();
col.Add(str);
}

rows.Add(col);
}

reader.Close();
conn.Close();

sw.Stop();

Console.WriteLine("Time to get {0} rows: {1} msec", nbr_rows, sw.ElapsedMilliseconds);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}

return rows;
}
< /code>
c ++ Удалить код без ошибки < /p>
std::string sql = "DELETE FROM [some_table] WHERE ID='some_id';";
if (query.exec_direct(sql) < 0)
{
std::cout https://learn.microsoft.com/en-us/sql/t-sql/statements/delete-transact-sql?view=sql-server-2017 

Подробнее здесь: [url]https://stackoverflow.com/questions/53108796/delete-c-sharp-sqlcommand-subquery-returned-more-than-1-value[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»