有没有一种正确的方法可以将 Sql Helper 类用于父子表

Jiale Xue - MSFT 46,456 信誉分 Microsoft 供应商
2024-06-03T07:24:34.1866667+00:00

以下代码适用于单个 sql 语句,如果我需要处理父子表怎么办,例如,

product table product details table

please help ~

public static void ExecuteNonQuery(string commandText)
{
using (SqlCommand command = new SqlCommand())
{
// Set up the connection
SqlConnection connection = DBConnection.SqlConn;
command.Connection = connection;
            // Start a local transaction
            SqlTransaction transaction = connection.BeginTransaction();
            command.Transaction = transaction;

            try
            {
                command.CommandType = CommandType.Text;
                command.CommandText = commandText;
                command.ExecuteNonQuery();

                transaction.Commit();
            }
            catch (SqlException e)
            {
                transaction.Rollback();
                MessageBox.Show(e.ToString());
            }
        }
    }

Note:此问题总结整理于:Is there a proper way to use Sql Helper class for Parent-Child tables

Windows 窗体
Windows 窗体
一组用于开发图形用户界面的 .NET Framework 托管库。
113 个问题
C#
C#
一种面向对象的类型安全的编程语言,它起源于 C 语言系列,包括对面向组件的编程的支持。
188 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. Hui Liu-MSFT 48,571 信誉分 Microsoft 供应商
    2024-06-03T08:32:48.4133333+00:00

    我们可以在第一个 sql 语句中添加一个输出子句

    然后使用 ExecuteScalar 获取其 ID,然后将其用于第二个 SQL 语句。

    请尝试这是否能满足您的需求:

                string connString = @"";  
                using (SqlConnection connection = new SqlConnection(connString))  
                {  
                    connection.Open();  
                    using (SqlCommand command = new SqlCommand("insert into ScoreTable OUTPUT Inserted.ID values(4,'Tom',84,54,65)", connection))  
                    {  
                        SqlTransaction transaction = connection.BeginTransaction();  
                        command.Transaction = transaction;  
      
                        try  
                        {  
                            int insertedRowID = (int)command.ExecuteScalar();  
                            command.CommandText = "update ScoreTable set Name = @name where id = @id";  
                            command.Parameters.Add("@name", System.Data.SqlDbType.NVarChar).Value = "UpdatedName";  
                            command.Parameters.Add("@id", System.Data.SqlDbType.Int).Value = insertedRowID;  
                            command.ExecuteNonQuery();  
                            transaction.Commit();  
                        }  
                        catch (Exception ex)   
                        {  
                            Console.WriteLine(ex.Message);  
                            transaction.Rollback();  
                        }  
                              
                    }  
                }  
    

    如果回复有帮助,请点击“接受答案”并点赞。 注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知。

    1 个人认为此答案很有帮助。
    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。