【问题标题】:Creating a stored procedure using C#, ODBC Client使用 C#、ODBC 客户端创建存储过程
【发布时间】:2017-11-28 04:37:29
【问题描述】:

在我的项目中,我有 500 多个存储过程需要创建,我创建了一个应用程序来从目录中读取 500 个文件,

当我尝试通过 ODBC 命令执行创建过程时,我收到此错误:

错误 [42601] [IBM][CLI 驱动程序][DB2/NT64] SQL0104N

我正在使用此代码:

OdbcDataReader dr = null;
String Error = "";

try
{
    using (OdbcConnection con = new OdbcConnection(connectionStr))
    {
        con.Open();

        using (OdbcCommand cmd = new OdbcCommand())
        {
            cmd.Connection = con;
            cmd.CommandText = sQL_To_Run;
            dr = cmd.ExecuteReader();
        }
    }
}
catch (Exception ex)
{
    Error = $"Error Running {sQL_To_Run} => Error Message:  {ex.Message}";
    Console.WriteLine(Error);
}

【问题讨论】:

  • 这是一个非常神秘的错误。您可以调试并查看它是在连接上还是在executereader上抛出的?似乎配置和/或数据库安装错误..您可以验证您已连接并且您的数据库正在工作吗?
  • @Jesse,我可以使用上面的代码删除存储过程,现在我想重新创建存储过程,我得到了错误。
  • 您的异常是否有任何内部异常或任何其他信息?你也可以分享你的 sql_to_run 吗?
  • 阅读在 C# 中执行存储过程或 sql 语句时选择与插入更新和删除的用途
  • SQL0104N 表示您的 SQL 语句中有语法错误,您出于某种原因选择不显示。

标签: c# stored-procedures db2 odbc


【解决方案1】:

使用cmd.ExecuteNonQuery(),因为cmd.ExecuteReader() 用于选择

【讨论】:

    【解决方案2】:

    如果您在 SP 中使用带小数点的十进制数字(常量),如果数据库配置了十进制逗号或 CLI 的区域设置不匹配,您将遇到此类问题。你可以在这里阅读更多关于它的信息http://www-01.ibm.com/support/docview.wss?uid=swg21352772

    【讨论】:

    • 我没有使用任何小数,但问题似乎是因为 DB2 将分号作为终止字符。有没有办法在 odbccommand 中指定一个新的终止字符?
    • @Anand 我不这么认为。也许您可以在脚本开头插入 --#SET TERMINATOR 指令。也许像cmd.CommandText = "--#SET TERMINATOR X'5E'" + System.Environment.NewLine + sQL_To_Run; //Sets the statement terminator to comma
    猜你喜欢
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 2011-12-25
    • 2014-11-04
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    相关资源
    最近更新 更多