c# - 从 C# 执行 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);
}
解决方案
您可以执行一个存储过程,将其名称提供给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
调用检索您的数据,然后继续直到有记录可供读取。在循环内部,您可以检索索引读取器实例的字段数据(并将对象值转换为适当的类型)
推荐阅读
- ruby-on-rails - 渲染一个 ActiveReccord:relationship 与特定的 cat 值
- javascript - 在 Vue 的 window.api 中用 axios 开玩笑
- python - JSON 没有正确解析,即使它应该是正确的
- php - Woocommerce 从“附加信息”中删除必填字段
- shopify - 如何在 Shopify 中添加自己的模块?
- angular - 如何为角材料滑块拇指创建自定义气泡动画?
- awk - 使用 awk 从模式文件中查找另一个文件的完全匹配(模式包含要忽略的正则表达式符号)
- node.js - 由于 `/usr/local/lib` 和 `/usr/local/include` 被删除,如何让 MacOS 识别以前安装的软件包?
- python - 我需要帮助来修改一个非常基本的循环以使用索引而不是变量名
- jquery - 无法在基础 5 中使用手风琴