从C#执行SQL Server存储过程

时间:2018-05-24 22:39:58

标签: c# sql sql-server

我在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);
}

2 个答案:

答案 0 :(得分:6)

您可以执行存储过程,将其名称提供给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();
}

ExecuteReader方法开始使用Read调用检索您的数据,然后继续,直到有要读取的记录。在循环内部,您可以检索索引读取器实例的字段数据(并将对象值转换为适当的类型)

答案 1 :(得分:0)

您尚未在SqlCommand上调用ExecuteNonQuery

command.ExecuteNonQuery()