2016-07-24 63 views
-1

我有一个C#程序从中我想执行插入选择问题,C#

Insert into table 
    Select * from table2 

下面的代码我有

using (SqlConnection conn = new SqlConnection(ConfigurationManager 
          .ConnectionStrings["SQLConnectionString2"].ConnectionString)) 
{ 
    conn.Open(); 

    string selectStmt = "INSERT INTO [TestDB].[dbo].[Test] (ID, Name, CreatedDate) " + 
         "SELECT TOP 10 [ID], [Name], [CreatedDate] FROM [TestDB].[dbo].[TempOrig]"; 

    using (SqlCommand cmd2 = new SqlCommand(selectStmt, conn)) 
    { 
     int resultValue = cmd2.ExecuteNonQuery(); 
     Console.WriteLine(resultValue.ToString()); 
    } 

    conn.Close(); 
} 

我看不出有任何行被插入到[TestDB].[dbo].[Test]既不有一个错误。

我不确定发生了什么事。

感谢 MR

+4

你告存在'TempOrig'表中的数据? – user3185569

+1

| DataDirectory |的另一个受害者连接字符串中的快捷方式? _resultValue_的价值是什么? – Steve

+2

调试程序。是否抛出异常?如果没有,则SQL代码或数据库本身存在问题。 – null

回答

1

您的问题是,你只插入行,您的SQL查询没有返回任何行,这是一个简单的插入。

但是如果您在插入时使用了OUTPUT子句,您将能够看到插入的行。

还有一点要注意的是,SQL查询中的OUTPUT子句将返回一个表,因此您不能使用int resultValue变量捕获结果,您将需要一个DataTable对象。

可以做的事:

  1. 修改SQL查询添加OUTPUT条款。
  2. 创建一个DataTable对象。
  3. 用插入返回的结果集填充DataTable对象。
  4. 最后从DataTable对象中读取并显示在控制台上。

string conString = "Server=ServerName;Database=DBName;User Id=UserName;Password =********; "; 
string sqlcmd = " INSERT INTO [TestDB].[dbo].[Test] (ID, Name, CreatedDate) " 
       + " OUTPUT inserted.ID, inserted.Name, inserted.CreatedDate " 
       + " SELECT TOP 10 [ID], [Name], [CreatedDate] FROM [TestDB].[dbo].[TempOrig] "; 

using (SqlConnection con = new SqlConnection(conString)) 
{ 
    using (SqlCommand cmd = new SqlCommand(sqlcmd, con)) 
    { 
     con.Open(); 

     // fill in the DataTable object 
     DataTable dt = new DataTable(); 
     using (var insertedOutput = cmd.ExecuteReader()) 
     { 
      dt.Load(insertedOutput); 
     } 


     // Read from DataTable object and print on the console 
     DataRow[] currentRows = dt.Select(null, null); 

     if (currentRows.Length < 1) 
      Console.WriteLine("No Current Rows Found"); 
     else 
     { 
      foreach (DataColumn column in dt.Columns) 
       Console.Write("\t{0}", column.ColumnName); 

      Console.WriteLine("\t"); 

      foreach (DataRow row in currentRows) 
      { 
       foreach (DataColumn column in dt.Columns) 
        Console.Write("\t{0}", row[column]); 

       Console.WriteLine("\t"); 
      } 
     } 
     Console.ReadLine(); 
    } 
} 
+1

我认为你误解了这个问题 – Steve

+0

你误会了这个问题 – user2726975