我尝试了各种方法,但似乎没有办法。该例程保持返回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
答案 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设置命令参数。