【问题标题】:C# program does not execute Stored ProcedureC#程序不执行存储过程
【发布时间】:2023-04-03 11:54:01
【问题描述】:

我想通过 C# 在 Azure SQL-Server 上运行我的存储过程,但它不起作用,我不知道如何找出原因。存储过程有两个输入参数,并基于这些将信息插入到表中。所以我可以在表格中看到是否有新条目(SP 工作与否)。

在 SQL-Server 中使用我的 SP 作为

exec Commentary.Add_Information @ID = 34926, @year = '2020'  

工作得很好。但是从 c# 执行它不会在表中创建一个条目

public void CreateBasicInformation()
{
    SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
    builder.DataSource = "myServer.database.windows.net";
    builder.UserID = "admin";
    builder.Password = "myPass";
    builder.InitialCatalog = "myDB";

    try
    {
        SqlConnection cn = new SqlConnection(builder.ConnectionString);
        cn.Open();
        SqlCommand cmd = new SqlCommand("Add_Information", cn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@ID", "34926");
        cmd.Parameters.AddWithValue("@year", "2020");
        cn.Close();
    }
    catch (SqlException sqlEx)
    {
        Console.WriteLine(sqlEx.Message);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

我已经尝试捕捉错误但没有。最后我得到的只是

程序“[9480] test_SP.exe”已退出,代码为 0 (0x0)。

代码中是否有错误,或者有什么方法可以找出为什么 C# 和 SP 不能一起工作?

【问题讨论】:

  • 您的ExecuteNonQuery()ExecuteReader() 等命令在哪里?
  • 旁注,你也应该在这里使用using
  • 看来您在执行代码中传递了一个数字,并在此处传递了一个字符串 cmd.Parameters.AddWithValue("@ID", "34926");

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


【解决方案1】:

您实际上并没有执行您的命令,您需要将以下行添加到execute它:

cmd.ExecuteNonQuery();
cn.Close();

现在也强烈建议使用Using statement

using 语句的目的是提供一种更简单的方法 指定程序何时需要非托管资源,以及 不再需要时。

【讨论】:

  • 有点想念你:) 使用的好地方,因为关闭不足以正确处理对象。这里有一个很好的解释:stackoverflow.com/questions/42719398/…
  • 就是这样。 Using 不支持 Catch Exception 这就是我使用它的原因。但我阅读了更多关于它的内容并改回使用。非常感谢!
【解决方案2】:

你没有执行你的命令: https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlcommand.executenonquery?view=netframework-4.8

试试

public void CreateBasicInformation()
{
    SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
    builder.DataSource = "myServer.database.windows.net";
    builder.UserID = "admin";
    builder.Password = "myPass";
    builder.InitialCatalog = "myDB";

    try
   {
        SqlConnection cn = new SqlConnection(builder.ConnectionString);
        cn.Open();
        SqlCommand cmd = new SqlCommand("Add_Information", cn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@ID", "34926");
        cmd.Parameters.AddWithValue("@year", "2020");
        // Execute and get rows affected count. 
       var rowsAffected = cmd.ExecuteNonQuery();
        cn.Close();
    }
    catch (SqlException sqlEx)
    {
        Console.WriteLine(sqlEx.Message);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 2010-09-15
    相关资源
    最近更新 更多