command.ExecuteScalar没有返回我知道存在的值

时间:2014-06-04 14:32:22

标签: c# asp.net sql-server executescalar

我尝试了各种方法,但似乎没有办法。该例程保持返回0,因为结果为null。

这是我的代码:

string strSql = "SELECT [ID] FROM [PurchaseOrder].[dbo].[FMSSupplier] where (ExternalRef = @ExternalRef) and (CompanyID = @CompanyID)";

try
{
     SqlCommand command = new SqlCommand(strSql);
     command.Connection = new SqlConnection(PO_ConnectionString);
     command.CommandType = CommandType.Text;
     command.Parameters.Add(new SqlParameter("@ExternalRef",SqlDbType.NVarChar ,50){Value = strExternalRef});
     command.Parameters.Add(new SqlParameter("@CompanyID", SqlDbType.Int) { Value = intCompanyID });
     if (command.Connection.State == ConnectionState.Closed) command.Connection.Open();
     var result = command.ExecuteScalar();
     if (result != null)
     {
         return (int)result;
     }
     else
     {
         return 0;
     }
}

我在SQL Server中对此进行了测试,记录存在:

SELECT [ID] 
FROM [PurchaseOrder].[dbo].[FMSSupplier] 
WHERE (ExternalRef = 'EDE01') and (CompanyID = 24)

记录ID不为零,ConnectionString在其他实例中有效。

这是我的两个参数的值: CompanyID = 24 strExternalRef = EDE01

2 个答案:

答案 0 :(得分:1)

首先也是最重要的,检查

 if (command.Connection.State == ConnectionState.Closed) command.Connection.Open();

不保证连接会打开。为什么呢?

状态可以是:

    Broken
    Connecting
    //..etc

其次我不知道你是否为intCompanyID , strExternalRef值赋值(也许你在片段中没有向我们展示)......

如果这是第一个调试步骤,请尝试尝试:

   try
    {
         SqlCommand command = new SqlCommand(strSql);
         command.Connection = new SqlConnection(PO_ConnectionString);
         command.CommandType = CommandType.Text;
         command.Parameters.Add(new SqlParameter("@ExternalRef",SqlDbType.NVarChar ,50){Value ="EDE01"});
         command.Parameters.Add(new SqlParameter("@CompanyID", SqlDbType.Int) { Value = 24});
         command.Connection.Open();
         var result = command.ExecuteScalar();
         if (result != null)
         {
             return (int)result;
         }
         else
         {
             return 0;
         }
}

 catch (Exception ex)
{
  MessageBox.Show(ex.Message);
}

答案 1 :(得分:0)

确保您的参数使用与数据库列正在使用的相同的SqlDbType。在我的情况下,我在相关数据库列使用NVarChar时使用SqlDbType.VarChar设置命令参数。