2017-06-01 83 views
0

我想從其他表創建新表併發送電子郵件。但是,它一直有錯誤的sda.Fill(dt);如何使用其他表創建新的數據表

System.Data.SqlClient.SqlException:附近 '(' 不正確的關鍵字 '打開' 附近有語法不正確的語法

private DataTable GetData() 
{ 
    string connString = @"Data Source=aa.database.windows.net;Initial Catalog=aa;Persist Security Info=True;User ID=aa;Password=aa"; 

    string query = "CREATE TABLE new_table AS(SELECT ID, Employee, Name, Open Date, Task FROM tblEmployees, tblEmployees, Stores, Stores, tblTasks)"; 
    using (SqlConnection con = new SqlConnection(connString)) 
    { 
     using (SqlCommand comm = new SqlCommand(query)) 
     { 
      using (SqlDataAdapter sda = new SqlDataAdapter()) 
      { 
       comm.Connection = con; 
       sda.SelectCommand = comm; 
       using (DataTable dt = new DataTable()) 
       { 
        sda.Fill(dt); 
        return dt; 
       } 
      } 
     } 
    } 
} 
+1

請將錯誤消息添加到問題中。 – Crowcoder

+0

這真的是mysql嗎?因爲如果需要,你需要使用'MySqlConnection','MySqlCommand'等,而不是'SqlConnection'等。 – Crowcoder

+0

爲什麼你首先使用DataTable?電子郵件與此有什麼關係? – mason

回答

0
CREATE TABLE new_table AS (SELECT ... 

如果您的新對象完全由另一個表中的SELECT定義,那麼您需要CREATE VIEW而不是CREATE TABLE。不應該有括號。正如@ babak-nafias所說,列名中必須沒有空格 - 或者應該用「」引號或[]括號引用它們。

CREATE VIEW new_view AS SELECT ID, Employee, Name, Open Date, Task FROM tblEmployees, tblEmployees, Stores, Stores, tblTasks; 

最後 - 如果您選擇所有這些表 - tblEmployee選擇兩次! - 沒有JOIN關係,甚至WHERE條款,你會得到:

  • 多個相同的行龐大的數字
  • 歧義錯誤時,它不知道從哪個獲得表名稱
0

是你。引用帶有空格的列名稱將Open Date更改爲[Open Date]並且您的查詢應該可以工作

您還缺少右括號

+0

好抓!並需要添加右括號或只刪除CREATE TABLE new_table AS( – NoSaidTheCompiler

0

錯誤消息指的是您在查詢中使用的正確的sql語法。除非有特別的原因,你可以刪除您查詢的第一部分,並認爲:

string query = "SELECT ID, Employee, Name, [Open Date], Task FROM tblEmployees, tblEmployees, Stores, Stores, tblTasks";

(感謝巴巴克Naffas捕捉的列名稱空間)

這應該解決SqlException

另外,DataTable沒有執行IDisposable所以你爲什麼使用Using聲明?您也可以刪除Using聲明

using (SqlDataAdapter sda = new SqlDataAdapter()) 
{ 
    comm.Connection = con; 
    sda.SelectCommand = comm; 
    DataTable dt = new DataTable(); 
    sda.Fill(dt); 
    return dt; 
} 
相關問題