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

时间:2014-05-28 10:24:44

标签: c# sql asp.net-mvc

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

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命令吗?最好的方法是怎样做的?

1 个答案:

答案 0 :(得分:0)

您可以通过SQL中的JOIN解决此问题。但是,如果不表示相同的列,则可能不正确。

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

一起使用

请看这个链接:

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