2010-05-19 40 views
0

我在寫我們的競爭對手到我們的數據庫:) 數據庫進口商我有一個代碼生成器,創建方法的形式導入到我們的數據庫就像使用未分配的局部變量的「XXX」

public void Test_Import_Customer_1() 

// variables 
string conn; 
string sqlSelect; 
string sqlInsert; 

int extID; 
string name; 
string name2; 
DateTime date_inserted; 

sqlSelect="select id,name,date_inserted from table_competitors_1"; 
oledbreader reader = new GetOledbRader(sqlString,conn); 
while (reader.read()) 
{ 
    name=left((string)myreader["name"],50); //limitation of my field 
    date_inserted=myreader["date_inserted"]; 
    sqlInsert=string.Format("insert into table(name,name2,date_inserted)values '{0}', '{1}', {2})",name,name2,date_inserted); //here is the problem name2 "Use of unassigned local variable" 
    ExecuteSQL(sqlInsert) 
} 

由於不同公司數據庫具有不同的字段,我無法爲每個變量設置值,並且有大量表格需要將一個變量放到下一個變量中。

sqlSelect_Company_1 = "select name,date_inserted from table_1"; 
sqlSelect_Company_2 = "select name,name2 from table_2"; 

是有辦法來覆蓋由一個具有默認值的每個變量之一的打字?

回答

0

不是將參數值存儲在變量中,而是將它們存儲在Dictionary對象中,其中鍵爲字段名稱,值/ params爲值。

創建一個通用方法,它爲參數的表名和字典提供一個字符串。你可以使用字符串生成器來建立你的sql字符串。

0

不,這是不可能的。您必須爲每個變量分配一個默認值。您不能使用尚未初始化的變量 - 它們可能包含隨機值,您當然不希望在數據庫中插入隨機值!

實際上你想要做的是:爲每個數據庫編寫一個單獨的方法,使用你需要的值。沒有其他辦法,這在技術上是不可能的。

如果您有大量的目標數據庫,有很多方法可以解決此問題,但如果您不熟悉足夠的背景,我不能很好地推薦此操作。 (我從你的問題來看,你是相當新的C#和數據庫?很抱歉,如果我錯了。)

只寫每個數據庫的新方法。

+0

是的我對c#比較陌生,但對數據庫不是。問題是,有數據庫版本的大數目(訪問,FDB,GDB,MSSQL,MySQL的) 是的它想創造每個競爭者的方法,但希望有一些好消息:) – Tomislav 2010-05-19 13:42:38

+1

注意,在實踐中, CLR始終將局部變量初始化爲默認值。當地人使用前必須明確賦值C#的規則,以防止公共類的邏輯錯誤,而不是防止「隨機」初始值的觀察。 – 2010-05-19 14:07:52

+0

是的,我故意忽略了這個事實來說明基本問題。我可以引用雷蒙德嗎?都捨不得虧的! JK;)我愛你的博客Eric。 – mafu 2010-05-19 14:34:23