C# C SQL添加参数
我试图通过在C中执行以下SQL查询来返回一行:C# C SQL添加参数,c#,sql,sql-server,parameters,C#,Sql,Sql Server,Parameters,我试图通过在C中执行以下SQL查询来返回一行: SqlCommand cmd = new SqlCommand(); string selectquery = "SELECT TOP (1) [ZVNr] ZVNR_TABLE WHERE [ZVNr] = @zvnr order by [ZVNr] DESC"; cmd.Parameters.AddWithValue("@zvnr", "20170530-01"); cmd.CommandText = selectquery; cmd.Comm
SqlCommand cmd = new SqlCommand();
string selectquery = "SELECT TOP (1) [ZVNr] ZVNR_TABLE WHERE [ZVNr] = @zvnr order by [ZVNr] DESC";
cmd.Parameters.AddWithValue("@zvnr", "20170530-01");
cmd.CommandText = selectquery;
cmd.CommandType = CommandType.Text;
cmd.Connection = sqlConnection;
try
{
sqlConnection.Open();
int recordsAffected = cmd.ExecuteNonQuery();
if(recordsAffected != -1)
{
return 0;
}
else
{
return 1;
}
ZVNR_表如下所示:
ZVNR | varchar (50)
20170530-01
结果总是->recordsAffected=-1
尽管我在Microsoft SQL Server Management Studio中执行相同的SQL查询时,它仍然有效。ExecuteOnQuery用于INSERT或UPDATE语句,并返回受影响的行数。
如果要返回行的单个字段,必须使用ExecuteScalar
因为您是从datatable中选择数据,而不是插入或更新记录,所以recordsAffected始终为-1您在代码中使用了用于插入或更新语句的SELECT语句。 您必须使用一个以上的行和!列或标量1行/1列=一项 对于SQLDataReader: 对于ExecuteScalar: 如果您希望在更改数据库中的项目后获得受影响的计数,可以使用cmd.ExecuteNonQuery获取该计数,该查询将返回该计数: 对于ExecuteOnQuery: 对于UPDATE、INSERT和DELETE语句,返回值是受命令影响的行数
上面给出的答案是可以的,但如果你只是想看看它是否存在,你可以做一个计数
using (SqlConnection connection = new SqlConnection(connectionstring))
{
string query = "SELECT Count([ZVNr]) ZVNR_TABLE WHERE [ZVNr] = @zvnr order by [ZVNr] DESC";
using (SqlCommand cmd = new SqlCommand(query, connection))
{
cmd.Parameters.AddWithValue("@zvnr", "20170530-01");
try
{
connection.Open();
int result = (int)cmd.ExecuteScalar();
}
}
}
您正在代码中使用SELECT语句,并使用cmd.ExecuteNonQuery(用于插入等操作)。Execute scalar返回请求的列,而不是受影响的行。int affectedCount=Int32cmd.ExecuteScalar;示例中的ZVNr是一个字符串,因此您的查询肯定会出错。这里不需要计数,空检查也可以工作。计数可确保您始终返回一个int。为您保存检查空值的附加验证。因为你正在检查它是否存在,你检查它是否发生了,所以这也会更有逻辑意义。
//SELECT col1, col2, ..., coln FROM tbl;
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
Console.WriteLine("{0}\t{1}", reader.GetInt32(0),
reader.GetString(1));
}
}
else
{
Console.WriteLine("No rows found.");
}
reader.Close();
//SELECT COUNT(*) FROM region; or any other single value SELECT statement
int count = (int)cmd.ExecuteScalar(); //cast the type as needed
//INSERT INTO tbl (...) VALUES (...) or any other non-query statement
int rowsAffected = (Int32)cmd.ExecuteNonQuery();
using (SqlConnection connection = new SqlConnection(connectionstring))
{
string query = "SELECT Count([ZVNr]) ZVNR_TABLE WHERE [ZVNr] = @zvnr order by [ZVNr] DESC";
using (SqlCommand cmd = new SqlCommand(query, connection))
{
cmd.Parameters.AddWithValue("@zvnr", "20170530-01");
try
{
connection.Open();
int result = (int)cmd.ExecuteScalar();
}
}
}