我正在尝试运行数据验证,执行一些代码并将数据从一个SQL查询传递到另一个SQL查询。
我目前的代码如下所示:
public string SelectUniqueKeyNumber()
{
string newList = string.Join(Environment.NewLine, listOfSkus).ToString();
string key_id;
string sqlConnectionString = @"someConnectionString";
using (SqlConnection connection = new SqlConnection(sqlConnectionString))
{
connection.Open();
SqlCommand command = new SqlCommand("select top 1 KEY_NUMBER from MyTable where QTY_ON_HAND > 0 " + newList + " order by NEWID()", connection);
SqlDataReader readerKey = command.ExecuteReader();
readerKey.Read();
key_id = String.Format(readerKey[0].ToString());
}
SelectSkuNumber(key_id);
return key_id;
}
我想要做的是检查我的readerKey.Read()
是否没有返回null
值。如果确实如此,则停止该过程,否则继续。我试过它的方式如下所示:
public string SelectUniqueKeyNumber()
{
string newList = string.Join(Environment.NewLine, listOfSkus).ToString();
string key_id;
string sqlConnectionString = @"someConnectionString";
using (SqlConnection connection = new SqlConnection(sqlConnectionString))
{
connection.Open();
SqlCommand command = new SqlCommand("select top 1 KEY_NUMBER from MyTable where QTY_ON_HAND > 0 " + newList + " order by NEWID()", connection);
SqlDataReader readerKey = command.ExecuteReader();
readerKey.Read();
if(readerkey.Read().ToString() == null)
{
//--- stop processing
}
else
{
key_id = String.Format(readerKey[0].ToString());
}
}
SelectSkuNumber(key_id); //---> Then ...(key_id) is not declared value
return key_id;
}
通过这样做,我无法访问和传递SelectSkuNumber(key_id)
的数据,因为:Use of unassigned local variable 'key_id'
有任何想法吗?
您需要做的就是在声明时为key_id分配一些内容,例如:
string key_id = null; // not string key_id;
以后,使用后:
if (key_id != null)
{
SelectSkuNumber(key_id); //---> Then ...(key_id) is not declared value
}
return key_id;
当然,如果返回null,函数的调用者应该知道该怎么做。
为了避免这个特殊问题,你可以为null
分配一些值或nkey_id
,例如。 key_id = "";
。
但是你还有一些问题:
Parameters
类的SqlCommand
集合。newList = {"some", "thing"};
然后你的查询将是:
select top 1 KEY_NUMBER
from MyTable where QTY_ON_HAND > 0
some
thing
order by NEWID()
至少可以说这是非常非常不正确的。
if(readerkey.Read().ToString() == null)
条件... Read
返回bool
,这是true
或false
,它不是参考类型,所以ToString()
永远不会是null
,因此条件总是会失败。如果你想检查数据库中是否有NULL
,你应该检查:
if (readerKey.Read() && readerKey["KEY_NUMBER"] == DBNull.Value)
首先读取行,然后接收该行中列的值。它使用短路的情况,没有返回记录。
readerKey.Read();
声明之前,if
是不必要的。