2016-07-07 49 views
1

我有一個名爲Reports的表的SQLite數據庫。沒有我想要做的是添加列中的產品不在表中。向SQLite表添加列不使用完整的項目名稱

因此,它通過報表查看產品列是否存在,如果不存在,則添加列。

下面是代碼:

using Stock_A_Lot.BAL; 
using System; 
using System.Data; 
using System.Windows.Forms; 

namespace Stock_A_Lot.PL 
{ 
public partial class Report_Form : Form 
{ 
    DBHelper db = new DBHelper(); 
    Database_Handler dbh = new Database_Handler(); 
    public Report_Form() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     DataTable Prods; 
     String query = "Select ProdDesc From Product"; 
     Prods = db.GetDataTable(query); 

     DataTable Report; 
     String queryReport = "Select * From Report"; 
     Report = db.GetDataTable(queryReport); 

     foreach(DataRow dr in Prods.Rows) 
     { 
      ContainColumn(dr[0].ToString() + "Curr", Report); 
      ContainColumn(dr[0].ToString() + "Prev", Report); 
     } 
    } 

    private void ContainColumn(string columnName, DataTable table) 
    { 
     DataColumnCollection columns = table.Columns; 

     if (columns.Contains(columnName)) 
     { 

     } 
     else 
     { 
      string query = "ALTER TABLE Report ADD COLUMN " + columnName + " TEXT DEFAULT '0';"; 
      dbh.updatereportable(query); 
     } 
    } 
} 

}

但是當它運行時,它僅使用一個產品名稱的第一個字,例如: 黑色標籤將只被解讀爲黑色,那麼它會拋出一個錯誤,說「重複的列名稱:黑色」。

我不知道我是否錯過了什麼或什麼。請幫忙。

回答

2

在你的查詢,如果columnname有它的空間像test column那麼它將與該錯誤失敗。嘗試轉義它說

"ALTER TABLE Report ADD COLUMN \"" + columnName + "\" TEXT DEFAULT '0'"; 
1

您是否嘗試過在列名稱周圍放置[]?

string query = "ALTER TABLE Report ADD COLUMN [" + columnName + "] TEXT DEFAULT '0';";

相關問題