【问题标题】:ODBC Command Does Not Accept ParameterODBC 命令不接受参数
【发布时间】:2012-03-20 14:55:52
【问题描述】:

我正在尝试通过 ODBC 连接从 C# (.NET 3.5) 调用本地 SQL Server (2008 R2) 实例上的存储过程。我遇到的问题是存储过程似乎没有接收到输入参数。

我也设置了分析器 - 没有看到任何输入参数进入数据库。

发生了什么事! : (

PS - 请不要建议使用任何不同的技术。


App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="MYDB" connectionString="Driver={SQL Server};Server=localhost;Database=MYDB;Uid=user_name;Pwd=password;"/>
  </connectionStrings>
</configuration>

程序.cs

using System;
using System.Configuration;
using System.Data;
using System.Data.Odbc;

namespace DatabaseTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string mssqlConnectionString = ConfigurationManager.ConnectionStrings["MYDB"].ConnectionString;

            using (OdbcConnection connection = new OdbcConnection(mssqlConnectionString))
            {
                connection.Open();

                using (OdbcCommand command = new OdbcCommand("usp_Get_UserInfo", connection))
                {
                    command.CommandType = CommandType.StoredProcedure;
                    command.CommandTimeout = 0;
                    command.Parameters.Add(new OdbcParameter("@username", OdbcType.VarChar, 32) { Value = "Bob", IsNullable = true,  });

                    using (OdbcDataReader reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            string userName = reader["USER_NAME"].ToString();
                            string userInfo = reader["USER_INFO"].ToString();

                            Console.WriteLine(String.Format("{0} | {1}", 
                                userName, userInfo));
                        }

                        reader.Close();
                    }
                }

                connection.Close();
            }
        }
    }
}

存储过程

USE [MYDB]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[usp_Get_UserInfo] 
    @username varchar(32) = null 
AS
BEGIN

    SET NOCOUNT ON;

    SELECT u.[USER_NAME]
        , u.USER_INFO
    FROM dbo.UserDataTable u
        WHERE u.[USER_NAME] = ISNULL(@username, u.[USER_NAME)

END

结果

[USER_NAME] | [USER_INFO]
Alice | Alice's info
Bob | Bob's info
Charlie | Charlie's info

【问题讨论】:

  • 您需要删除您拥有的.Open().Close()s,using 将处理打开和关闭。
  • @CAbbott 是的,太好了。这就是问题所在。它现在可以工作了......
  • 对不起,我忘了关闭讽刺块。我的错。 讽刺>
  • 所以你是在讽刺并利用它作为拒绝投票的机会?不错。
  • 我很抱歉误导您,但这显然不是这里的问题。问题是关于 ODBC 命令,而不是 using 语句。

标签: c# .net sql-server stored-procedures odbc


【解决方案1】:

经过一番激烈的谷歌搜索后找到了答案。

Execute Parameterized SQL StoredProcedure via ODBC

似乎odbc连接需要以非常有趣的方式调用存储过程。

我没有收到与该问题中的错误相同的错误,因为我的存储过程有一个可为空的参数。因此,我根本没有收到任何错误。

using (OdbcCommand command = new OdbcCommand("{call usp_Get_UserInfo (?)}", connection))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 2013-03-15
    相关资源
    最近更新 更多