2012-03-01 48 views
0

我有這個程序餵養我的數據。我拿這個數據(字符串)並解析它,以便不同的字段可以進入相應的數據庫表列。我可以解析字符串,但我找不到正確的函數或方法將它們發送到數據庫。這是我第二次使用sql server或數據庫。我已經做了插入這樣將分析後的字符串傳輸到sql server數據庫

MyCommand.CommandType = System.Data.CommandType.Text; MyCommand.CommandText = "INSERT INTO TimeStampTable(ID, TimeStamp) VALUES ('24', 'sep 13, 2009')";

據我所知,唯一的CommandType允許文本或存儲過程。在這種情況下,我想要插入正在被解析的字符串。

string teststring = dtString; 
string[] result = teststring.Split(',', ' ', ':', '='); 
Console.WriteLine("The parsed string looks like this:"); 
foreach (string word in result) 
{ 
    Console.WriteLine(word); 
} 

這是我的代碼,它解析我的傳入字符串。所以我收到姓名地址zip狀態等我想名稱去col1,地址去col2等我認爲這樣做的理想方法是將我的循環轉換爲這樣的東西

foreach (string word in result) 
{ 
    SqlDatasource.InsertCommand=Insert into Tablename col1 col2 col3(word); 
} 

有沒有人有任何建議?

回答

1

我會直接回答你的問題,但也有許多不同的方式,你可以去有關執行同樣的事情(我將列出一些在年底)

String insertQuery = "INSERT INTO TABLENAME (Col1, Col2, Col3...) VALUES ("; 
//This is also assuming that your data is in the same order as the columns 
int isFirstLoop = true 
foreach(string word in result) 
{ 
    if(!isFirstLoop) 
     insertQuery += "," 
    insertQuery += word; 
    isFirstLoop = false;   
} 
insertQuery += ")"; 
SqlDataSource.InsertCommand = insertQuery; 

注:這是SQL Injection非常開放,請記住這一點(你信任你的來源)。有一些方法可以清理數據,但最終,我認爲下面一些

替代列出的方法:

  • 使用存儲過程比直接TSQL。然後,您可以將您的數據映射到SQLParameters,我認爲這些SQLParameters是用來清理數據以防止SQL注入的。
  • 使用非常基本的ORM和/或LINQ,以便您可以直接使用對象。那麼你只需要讀取數據到一個POCO
  • 我相信有其他的方式,但是由於某種原因,我畫了一個空白。我認爲這是因爲這些是最常用的替代方案:)
+0

非常感謝賈斯汀,這對我來說是訣竅,我看到我的表中正確的列中解析的數據。我收到的數據實際上與我的專欄和可信來源的順序相同。不過,我很好奇這樣做調用存儲過程。它會有所作爲嗎?我感謝您的幫助。 – Rick 2012-03-01 20:08:18

+0

使用存儲過程可以更好地保護你免受SQL注入的攻擊,並且它會開始清理你的代碼(代碼應該看起來像代碼,SQL應該看起來像SQL,越接近這種分離,IMO越好) 。此外,通過使用存儲過程,您可以關閉數據庫,使其不允許直接SQL。這將允許更好的安全控制(您可以允許用戶/角色只訪問特定的sprocs),而不是隻允許任何SQL進入系統 – 2012-03-01 20:12:33

相關問題