c# - sql命令不适用于c#中的select语句

标签 c# .net windows-applications sqlcommand

我正在尝试使用 sql 命令执行以下代码以获取输出并将其存储在整数变量中。代码为空值插入返回 -1,这很好。

但是当数据库表中有值并且给出正确的输入时,代码再次返回相同的 -1 值。

有人能指出我正确的方向吗?

try {
    con.Open();
    SqlCommand cmd1 = new SqlCommand(@"(Select ERSConversionFactorID FROM " + schemaName + "[ERSConversionFactors] WHERE [ERSConversionFactor_CF] = @conversionvalue AND [ERSConversionFactor_Desc] = @convDescription)", con);

    if (comboBox_ConfacValue.Text == "")
    {
        cmd1.Parameters.Add("@conversionvalue", SqlDbType.NVarChar, 160).Value = DBNull.Value;
    }
    else
    {
        cmd1.Parameters.Add("@conversionvalue", SqlDbType.NVarChar, 160).Value = comboBox_ConfacValue.Text;
    }

    if (combobox_conversionDescription.Text == "")
    {
        cmd1.Parameters.Add("@convDescription", SqlDbType.NVarChar, 160).Value = DBNull.Value;
    }
    else
    {
        cmd1.Parameters.Add("@convDescription", SqlDbType.NVarChar, 160).Value = combobox_conversionDescription.Text;
    }

    string sql = "Select ERSConversionFactorID FROM " + schemaName + "[ERSConversionFactors] WHERE [ERSConversionFactor_CF] = @conversionvalue AND      [ERSConversionFactor_Desc] = @convDescription)";

    int conversionvalue = cmd1.ExecuteNonQuery();
}
catch (Exception ex)
{
    MessageBox.Show("Error : " + ex.Message);
}
finally
{
    con.Close();
}

谢谢

最佳答案

ExecuteNonQuery 不适用于从您的查询中返回值。它执行查询,但只返回受 INSERT、UPDATE 或 DELETE 语句影响的行数。

如果您查看 ExecuteNonQuery 上的备注部分MSDN上的页面你会找到返回值-1的原因。

对于 SELECT 命令,如果您只想通过 SELECT 语句检索第一行的第一列,则可以使用 ExecuteReader 或更好的 ExecuteScalar。
但是,因为您的查询有一个 WHERE 语句可能导致没有检索到任何行,所以您应该在 ExecuteScalar 的返回值上添加一个 null 检查。

object result = cmd1.ExecuteScalar();
if(result != null)
{
     int conversionvalue = Convert.ToInt32(result);
     .....

}

关于c# - sql命令不适用于c#中的select语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36894474/

相关文章:

c# - 如何在 C# 中将空值保存到 Mysql 表 DateTime 字段

mvc-mini-profiler - 在 Windows 应用程序上使用 MvcMiniProfiler 的任何方法?或者有姐妹申请吗?

c# - 在 "await DownloadTaskAsync"上调用 WebClient.CancelAsync 时出现 WebException

c# - 如何将变量声明为与 c# 中方法返回的数据类型相同的数据类型?

c# - 转换为数组

c# - 如何防止人们继续将 HTTP POST 循环到一个函数?

c# - 在 ashx 上的 c# web 应用程序中是否有任何 vb msgbox 替代方案?

c# - Entity Framework 检查 OnModelCreating 期间是否存在列

.net - 为客户提供 .NET 的替代方案

windows - 在 Windows 8 应用程序中提供指向 Toast 通知的链接