无法通过使用数据集接收从存储过程返回的多个值

时间:2012-01-31 23:56:49

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

我想通过将userid作为参数从存储过程(如下所示)返回多个值。我试图通过使用带数据集的函数(如下所示)接收多个值,但失败了,我得到了这样的错误列表:

错误2参数' 2':无法转换为' System.Data.SqlClient.SqlConnection'到'字符串'

错误5最佳重载方法匹配' System.Data.SqlClient.SqlDataAdapter.SqlDataAdapter(string,System.Data.SqlClient.SqlConnection)'有一些无效的论点

错误6参数1:无法转换为' System.Data.SqlClient.SqlCommand'到'字符串'

感谢任何回复。百万谢谢。

SQL:

ALTER PROCEDURE abc.testing

@userid int

AS

SELECT * FROM ss2_table
WHERE userid=@userid

C#:

public DataSet get_testing(int userid)
{
    DataSet ds_testing_total = null;
    using (SqlConnection connection = new SqlConnection(@"Userid=abc;Password=abc;Server=admin;Database=ss2"))
    {
        try
        {
            SqlCommand cmdselect1 = new SqlCommand();
            cmdselect1.CommandType = CommandType.StoredProcedure;
            cmdselect1.CommandText = "abc.testing";
            cmdselect1.Parameters.Add("@userid", SqlDbType.Int, 4).Value = userid;
            cmdselect1.Connection = connection;
            connection.Open();


            SqlDataAdapter dap1 = new SqlDataAdapter(cmdselect1, connection);
            ds_testing_total = new DataSet();
            dap1.Fill(ds_testing_total, "ss2_table");

            return ds_testing_total;
        }
        catch (Exception ex)
        {
            Console.WriteLine("Commit Exception Type: {0}", ex.GetType());
            Console.WriteLine("  Message: {0}", ex.Message);
        }
    }
}

2 个答案:

答案 0 :(得分:0)

应该是:

SqlDataAdapter dap1 = new SqlDataAdapter(cmdselect1.CommandText, connection);

-OR -

SqlDataAdapter dap1 = new SqlDataAdapter(cmdselect1);

不会

SqlDataAdapter dap1 = new SqlDataAdapter(cmdselect1, connection);

此外,您可以使用connection.CreateCommand()而不是新的SqlCommand()并设置连接来创建新的SqlCommand。

SqlCommand cmdselect1 = connection.CreateCommand();

答案 1 :(得分:0)

我似乎无法找到SqlDataAdapter的构造函数的重载,其中SqlCommand SqlConnection。这可能解释了为什么它被红线化了。

SqlCommand包含对SqlConnection的引用,因此您应该能够:

SqlDataAdapter dap1 = new SqlDataAdapter(cmdselect1);