在USING方法和SqlConnection中的IF条件检查

问题描述 投票:1回答:2

我正在尝试运行数据验证,执行一些代码并将数据从一个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'

有任何想法吗?

c# sql if-statement sqlconnection using-statement
2个回答
0
投票

您需要做的就是在声明时为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,函数的调用者应该知道该怎么做。


0
投票

为了避免这个特殊问题,你可以为null分配一些值或nkey_id,例如。 key_id = "";

但是你还有一些问题:

  1. 你很容易注入SQL,你应该使用Parameters类的SqlCommand集合。
  2. 您确定要正确连接查询吗?我们假设 newList = {"some", "thing"};

然后你的查询将是:

select top 1 KEY_NUMBER 
from MyTable where QTY_ON_HAND > 0
some
thing
order by NEWID()

至少可以说这是非常非常不正确的。

  1. if(readerkey.Read().ToString() == null)条件... Read返回bool,这是truefalse,它不是参考类型,所以ToString()永远不会是null,因此条件总是会失败。如果你想检查数据库中是否有NULL,你应该检查: if (readerKey.Read() && readerKey["KEY_NUMBER"] == DBNull.Value)

首先读取行,然后接收该行中列的值。它使用短路的情况,没有返回记录。

  1. readerKey.Read();声明之前,if是不必要的。
© www.soinside.com 2019 - 2024. All rights reserved.