2016-07-24 62 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