如何避免在sql连接和执行命令中重复

我可以用这个循环给我一个名字列表:

string commandText = @"SELECT ....;"; string connectionString = ConfigurationSettings.AppSettings["connectionString"]; using (SqlConnection connection = new SqlConnection(connectionString)) { SqlCommand command = new SqlCommand(commandText, connection); try { connection.Open(); using (SqlDataReader reader = command.ExecuteReader()) { DataTable dt = new DataTable(); dt.Load(reader); for (int i = dt.Rows.Count - 1; i >= 0; i--) { SqlCommand addresscommand = new SqlCommand(address, connection); addresscommand.Parameters.AddWithValue("@companyName", dt.Rows[i][0].ToString()); SqlDataReader addressreader = command.ExecuteReader(); string address = addressreader.GetString(0); } } } catch (Exception ex) { } } 

所以dt.Rows[i][0].ToString()是我需要添加到我所有不同的sql命令的名称。 因此,在for循环中,我将逐个执行每个sql命令获取每个值:

 SqlCommand addresscommand = new SqlCommand(address, connection); addresscommand.Parameters.AddWithValue("@companyName", dt.Rows[i][0].ToString()); SqlDataReader addressreader = addresscommand.ExecuteReader(); string comaddress = addressreader.GetString(0); SqlCommand keyProcessescommand = new SqlCommand(keyProcesses, connection); keyProcessescommand.Parameters.AddWithValue("@companyName", dt.Rows[i][0].ToString()); SqlDataReader keyProcessesreader = keyProcessescommand.ExecuteReader(); string comkeyProcesses = keyProcessesreader.GetString(0); SqlCommand standardscommand = new SqlCommand(standards, connection); standardscommand.Parameters.AddWithValue("@companyName", dt.Rows[i][0].ToString()); SqlDataReader standardsreader = standardscommand.ExecuteReader(); string comstandards = standardsreader.GetString(0); 

命令字符串由哪里确定:

  string address = @"SELECT address FROM Companies where companyName = @companyName"; string keyProcesses = @" SELECT distinct STUFF((SELECT ', '+ cn.name from WMCCMCategories cn INNER JOIN CategorySets uc ON uc.categoryId = cn.categoryID INNER JOIN KeyProcesses u ON u.categorySetId = uc.setId INNER JOIN Companies c ON c.companyId = u.companyId WHERE c.companyName = @companyName ORDER BY cn.name FOR XML PATH('')), 1, 1, '') AS listStr FROM WMCCMCategories cnn Group by cnn.name"; string standards = @" SELECT cn.name from WMCCMCategories cn INNER JOIN CategorySets uc ON uc.categoryId = cn.categoryID INNER JOIN Companies c ON c.standards = uc.setId WHERE c.companyName = @companyName"; 

我可以像上面那样执行多个sql命令吗? 最好的方法是怎样做的?

一种方法可以通过SQL中的JOIN来解决这个问题。 但是,如果不表示相同的列,则可能不正确。

现在就在一个命令中使用多个选择而言。 是的,您可以将SqlDataReader与NextResult()一起使用

请看这个链接:

http://csharp.net-informations.com/data-providers/csharp-multiple-resultsets.htm