C# 在SQL中执行多个Update语句忽略某些查询中的错误

C# 在SQL中执行多个Update语句忽略某些查询中的错误,c#,asp.net,sql-server,C#,Asp.net,Sql Server,我在asp.net和c#中创建了一个项目,我在SQL Server中一个接一个地编写了10个更新查询 我在多个表上执行了查询,这些表彼此相似,但并不完全相似 有些update语句不适用于某些表,因此我希望忽略该错误并执行其他查询并获得最终输出 是否可能如果是,请帮助我我将创建一个包含所有update语句的存储过程,每个语句都封装在TRY..CATCH块中 这应该是这样的: CREATE PROCEDURE [MyProc] AS BEGIN TRY BEGIN [STATEMEN

我在asp.net和c#中创建了一个项目,我在SQL Server中一个接一个地编写了10个更新查询 我在多个表上执行了查询,这些表彼此相似,但并不完全相似 有些update语句不适用于某些表,因此我希望忽略该错误并执行其他查询并获得最终输出
是否可能如果是,请帮助我我将创建一个包含所有update语句的存储过程,每个语句都封装在TRY..CATCH块中

这应该是这样的:

CREATE PROCEDURE [MyProc]
AS
BEGIN
TRY
    BEGIN
    [STATEMENT 1]
    END
CATCH
    BEGIN
    [DO SOMETHING... OR NOT]
    END

TRY
    BEGIN
    [STATEMENT 2]
    END
CATCH
    BEGIN
    [DO SOMETHING... OR NOT]
    END

TRY
    BEGIN
    [STATEMENT 3]
    END
CATCH
    BEGIN
    [DO SOMETHING... OR NOT]
    END

(...and so on)
END

我将创建一个包含所有update语句的存储过程,每个语句都封装在TRY..CATCH块中

这应该是这样的:

CREATE PROCEDURE [MyProc]
AS
BEGIN
TRY
    BEGIN
    [STATEMENT 1]
    END
CATCH
    BEGIN
    [DO SOMETHING... OR NOT]
    END

TRY
    BEGIN
    [STATEMENT 2]
    END
CATCH
    BEGIN
    [DO SOMETHING... OR NOT]
    END

TRY
    BEGIN
    [STATEMENT 3]
    END
CATCH
    BEGIN
    [DO SOMETHING... OR NOT]
    END

(...and so on)
END
你可以这样做

    try
{

//get values from text boxes for values you want to update in a string array queryarr
//here it has 4 fields id, name, address and tablename.

for(int i=0; i<5; i++)
{
  try
  {
    string connectionString =
        "server=myown;" +
        "initial catalog=something;" +
        "user id=somebody;" +
        "password=secret";
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        conn.Open();
        using (SqlCommand cmd =
            new SqlCommand("UPDATE "+queryarr[i,4]+"  SET Name=@NewName, Address=@NewAddress" +
                " WHERE Id=@Id", conn))
        {
            cmd.Parameters.AddWithValue("@Id", queryarr[i,0]);
            cmd.Parameters.AddWithValue("@Name", queryarr[i,1]);
            cmd.Parameters.AddWithValue("@Address", queryarr[i,2]);
            cmd.ExecuteNonQuery();

        }
    }
  }
   catch (SqlException ex)
  {
    //Log the exception but do not display any message.        
  } 

}
}
catch (Exception ex)
{
    //display error message

}
试试看
{
//从文本框中获取要在字符串数组queryarr中更新的值
//在这里,它有4个字段id、name、address和tablename。
对于(int i=0;i你可以这样做

    try
{

//get values from text boxes for values you want to update in a string array queryarr
//here it has 4 fields id, name, address and tablename.

for(int i=0; i<5; i++)
{
  try
  {
    string connectionString =
        "server=myown;" +
        "initial catalog=something;" +
        "user id=somebody;" +
        "password=secret";
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        conn.Open();
        using (SqlCommand cmd =
            new SqlCommand("UPDATE "+queryarr[i,4]+"  SET Name=@NewName, Address=@NewAddress" +
                " WHERE Id=@Id", conn))
        {
            cmd.Parameters.AddWithValue("@Id", queryarr[i,0]);
            cmd.Parameters.AddWithValue("@Name", queryarr[i,1]);
            cmd.Parameters.AddWithValue("@Address", queryarr[i,2]);
            cmd.ExecuteNonQuery();

        }
    }
  }
   catch (SqlException ex)
  {
    //Log the exception but do not display any message.        
  } 

}
}
catch (Exception ex)
{
    //display error message

}
试试看
{
//从文本框中获取要在字符串数组queryarr中更新的值
//在这里,它有4个字段id、name、address和tablename。

对于(int i=0;i在一个单查询之后,写“GO”语句可能是work,它只需逐个放置所有语句,它就应该将每个查询放置在它自己的try-catch块中(或者可以使用循环)在catch块中,您可以只记录哪个查询不起作用。这不仅会在记录错误时忽略错误,而且不会对其他查询的执行造成任何影响。在一个单查询后,写入“GO”语句可能有效,只需逐个放入所有语句即可,它应该有效地将每个查询放入自己的try-catch块(或者您可以使用循环)在catch块中,您可以只记录哪个查询不起作用。这不会在记录错误时忽略错误,而不会对其他查询的执行造成任何影响。