在C#中执行SQL Server存储过程

4

我在 C# 控制台应用程序中执行存储过程时遇到了问题,但不知道具体的问题出在哪里。能否请你看一下?

string path="";

StringBuilder sb = new StringBuilder();
StringBuilder sqlErrorMessages = new StringBuilder("Sql Exception:\n");

try
{ 
    SqlConnection conn = new SqlConnection("Data Source=DESKTOP-M3IMRLE\\SQLEXPRESS; Initial Catalog = db2; Integrated security=true");

    Console.WriteLine("Enter path : ");
    path = Console.ReadLine();
    conn.Open();

    SqlCommand cmd = new SqlCommand();

    SqlCommand command = new SqlCommand("EXECUTE main.mainproc @path='" + path + "'", conn);

    if(command!=null)
    { 
        Console.WriteLine("JSON loaded");
    }  

    conn.Close();
}
catch(SqlException ex)
{
    sqlErrorMessages.AppendFormat("Message: {0}\n", ex.Message);
}

我注意到的第一件事是,您从未执行您的命令。您还声明了 cmdsb,但没有使用它们,它们可能可以被删除。您应该将命令的 CommandText 声明为存储过程的名称,并将 CommandType 设置为 CommandType.StoredProcedure,然后将路径值作为 SqlParameter 添加到命令中。 - Jonathon Chase
3个回答

9

您可以通过在SqlCommand构造函数中给出存储过程的名称并将CommandType标记为存储过程来执行存储过程。
参数将加载到命令的Parameters集合中:

SqlCommand cmd = new SqlCommand("mainproc", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@path", SqlDbType.NVarChar).Value = path;
cmd.ExecuteNonQuery();

最后一次调用ExecuteNonQuery运行您的存储过程,但它是针对运行INSERT/UPDATE或DELETE命令的过程而设计的,换句话说,它是针对不返回数据的命令的。如果您的存储过程预计返回一个或多个记录,则需要更多的代码:
....
SqlDataReader reader = cmd.ExecuteReader();

while(reader.Read())
{
   // Get data from the first field of the current record assuming it is a string
   string data = reader[0].ToString();
}
< p > ExecuteReader 方法通过 Read 调用开始检索数据,然后继续检索直到有记录可读取。在循环内部,您可以通过对读取器实例进行索引(并将对象值转换为适当的类型)来检索字段数据。


0
 public DataSet GetDataSet(SqlConnection connection, string storedProcName, params SqlParameter[] parameters)
    {
        var command = new SqlCommand(storedProcName, connection) { CommandType = CommandType.StoredProcedure };
        command.Parameters.AddRange(parameters);

        var result = new DataSet();
        var dataAdapter = new SqlDataAdapter(command);
        dataAdapter.Fill(result);

        return result;
    }

请不要只发布代码答案,而是添加一些文本说明您的方法如何工作以及它与其他给出答案的不同之处。您还可以查看我们的“如何撰写好答案”条目。 - ahuemmer

0

你还没有在你的SqlCommand上调用ExecuteNonQuery

command.ExecuteNonQuery()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接