【问题标题】:How to query a C# list against a database table如何根据数据库表查询 C# 列表
【发布时间】:2019-04-09 19:10:48
【问题描述】:

当我传递列表的字符串版本时,我的代码没有从测试数据库表中返回任何行,但如果我直接传递列表成员,它确实返回行。

当我使用消息框显示字符串joinedSerialsList 时,它的格式似乎正确。

// Create comma delimited list of serials:
int currentSerial = beginning;
List<string> serialsList = new List<string>();

for (int i = 0; i < count; i++)
{
     serialsList.Add(currentSerial.ToString());
     currentSerial++;
}

string joinedSerialsList = string.Format("({0})", string.Join(", ", serialsList));

OleDbConnection connection = BadgeDatabaseDB.GetConnection();
string checkStatement
     = "SELECT SerialNumber, OrderNumber "
     + "FROM SerialNumbersMFG "
     + "WHERE SerialNumber IN (@List)";

OleDbCommand command = new OleDbCommand(checkStatement, connection);
command.Parameters.AddWithValue("@List", joinedSerialsList);

string duplicateSerials = "";

try
{
    connection.Open();
    OleDbDataReader dataReader = command.ExecuteReader();

    if (dataReader.Read())
    {
        duplicateSerials += dataReader["OrderNumber"].ToString() + "\n";
    }
}
catch (OleDbException ex)
    {
        throw ex;
    }
finally
    {
        connection.Close();
    }

return duplicateSerials;

【问题讨论】:

标签: c# database oledb


【解决方案1】:

我重写了你的示例,这项工作:

    private IEnumerable<string> getData()
    {
        // Create comma delimited list of serials:
        int currentSerial = 4452; // your constant
        var serialsList = new List<int>();
        var count = 100;

        for (int i = 0; i < count; i++)
            serialsList.Add(currentSerial++);

        var connString = getConnectionString();

        var results = new List<string>();
        string sqlSelect = $"SELECT SerialNumber, OrderNumber FROM SerialNumbersMFG WHERE SerialNumber IN ({string.Join(",", serialsList)})";

        using (var connection = new SqlConnection(connString)) // BadgeDatabaseDB.GetConnection();
        {
            using (var command = new SqlCommand(sqlSelect, connection))
            {
                connection.Open();
                var dataReader = command.ExecuteReader();

                while (dataReader.Read())
                    results.Add(dataReader["OrderNumber"].ToString());
            }
        }

        return results;
    }

【讨论】:

  • 哇,好用!我保持一切与我原来的一样,只是改变了陈述。一个问题,如果你不介意的话:“$”字符在 Select 字符串语句之前有什么作用?
  • $"" 是新的方便格式。允许在字符串中使用 {}。例如var str = $"Result is: {result}";
猜你喜欢
  • 2022-07-06
  • 2023-03-31
  • 1970-01-01
  • 2015-06-12
  • 2018-08-20
  • 1970-01-01
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多