相关疑难解决方法(0)

AddWithValue参数为NULL时的异常

我有以下代码来指定SQL查询的参数.我使用时会遇到异常Code 1; 但是当我使用时工作正常Code 2.在Code 2我们检查null并因此检查if..else块.

例外:

参数化查询'(@ application_ex_id nvarchar(4000))SELECT E.application_ex_id A'需要参数'@application_ex_id',这是未提供的.

代码1:

command.Parameters.AddWithValue("@application_ex_id", logSearch.LogID);
Run Code Online (Sandbox Code Playgroud)

代码2:

if (logSearch.LogID != null)
{
         command.Parameters.AddWithValue("@application_ex_id", logSearch.LogID);
}
else
{
        command.Parameters.AddWithValue("@application_ex_id", DBNull.Value );
}
Run Code Online (Sandbox Code Playgroud)

  1. 你能解释一下为什么它无法从代码1中的logSearch.LogID值中获取NULL(但能够接受DBNull)吗?

  2. 有没有更好的代码来处理这个?

参考:

  1. 将null分配给SqlParameter
  2. 返回的数据类型因表中的数据而异
  3. 从数据库smallint到C#nullable int的转换错误
  4. DBNull有什么意义?

    public Collection<Log> GetLogs(LogSearch logSearch)
    {
        Collection<Log> logs = new Collection<Log>();

        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();

            string commandText = @"SELECT  *
                FROM Application_Ex E 
                WHERE  (E.application_ex_id = @application_ex_id …
Run Code Online (Sandbox Code Playgroud)

.net c# ado.net

76
推荐指数
2
解决办法
5万
查看次数

使用SqlDataReader.IsDBNull时使用列名

您好我有这个代码从SQL DB读取数据.

我不知道应该如何编辑它以便我可以使用原始列名而不是列索引.

string query = "SELECT * FROM zajezd WHERE event='" + thisrow+ "' AND year='" + klientClass.Year() + "'";
SqlCommand cmd= new SqlCommand(query, spojeni);
spojeni.Open();
SqlDataReader read= cmd.ExecuteReader();


if (read.Read())
{
    maskedTextBox2.Text = read.IsDBNull(24) ? 
        string.Empty : 
        read.GetDateTime(24).ToString("MM/dd/yyyy");
Run Code Online (Sandbox Code Playgroud)

提前致谢.

c# sql sql-server winforms

13
推荐指数
2
解决办法
2万
查看次数

标签 统计

c# ×2

.net ×1

ado.net ×1

sql ×1

sql-server ×1

winforms ×1