Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C SQL添加参数_C#_Sql_Sql Server_Parameters - Fatal编程技术网

C# 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

我试图通过在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.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();
        }
    }
}