ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – 存储过程默认值

2019-07-17 07:08:24  阅读:125  来源: 互联网

标签:c sql sql-server tsql stored-procedures


谈到SQL,我是新手.使用如下参数创建存储过程时:

@executed           bit,
@failure            bit,
@success            bit,
@testID             int,
    @time               float = 0,
@name               varchar(200) = '',
@description        varchar(200) = '',
@executionDateTime  nvarchar(max) = '',
@message            nvarchar(max) = ''

这是T-SQL中默认值的正确形式?我试图使用NULL而不是”.

当我试图通过C#执行此过程时,我得到一个错误,指的是描述是预期但未提供的事实.当这样称呼时:

        cmd.Parameters["@description"].Value = result.Description;

result.Description为null.在SQL中,这不应该默认为NULL(在我的情况下是”)

这是调用命令:

        cmd.CommandText = "EXEC [dbo].insert_test_result @executed,
                           @failure, @success, @testID, @time, @name, 
                           @description, @executionDateTime, @message;";

        ...
        cmd.Parameters.Add("@description", SqlDbType.VarChar);
        cmd.Parameters.Add("@executionDateTime", SqlDbType.VarChar);
        cmd.Parameters.Add("@message", SqlDbType.VarChar);

        cmd.Parameters["@name"].Value = result.Name;
        cmd.Parameters["@description"].Value = result.Description;
        ...

        try
        {
            connection.Open();
            cmd.ExecuteNonQuery();
        }
        ...
        finally
        {
            connection.Close();
        }

解决方法:

更好的方法是将CommandText更改为SP的名称,将CommandType更改为StoredProcedure – 然后参数将更加干净地工作:

cmd.CommandText = "insert_test_result";
cmd.CommandType = CommandType.StoredProcedure;

这也允许更简单的通过名称,而不是位置.

通常,ADO.NET需要DBNull.Value,而不是null.我只是使用一个方便的方法循环我的args并用DBNull.Value替换任何空值 – 就像(包装)一样简单:

    foreach (IDataParameter param in command.Parameters)
    {
        if (param.Value == null) param.Value = DBNull.Value;
    }

然而!使用null指定值与使其采用默认值不同.如果要使用默认值,请不要在命令中包含该参数.

标签:c,sql,sql-server,tsql,stored-procedures
来源: https://codeday.me/bug/20190717/1485879.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有