2013-02-25 56 views
0

此代碼成功地在SQL數據庫中插入一個新值,但僅當我插入常量值時。
我需要幫助,它在下面的代碼中說**(?)**,我想在代碼中插入新值而不指定常量。 我的意思是,我希望能夠在輸出窗口中鍵入任何隨機值,並將其插入到SQL數據庫中。使用c插入sql#

private void InsertInfo() 
{ 
    String strConnection = "Data Source=HP\\SQLEXPRESS;database=MK;Integrated Security=true"; 

    SqlConnection con = new SqlConnection(strConnection); 
    string connetionString = null; 
    SqlConnection connection ; 
    SqlDataAdapter adapter = new SqlDataAdapter(); 

    connetionString = @"Data Source=HP\SQLEXPRESS;database=MK;Integrated Security=true"; 
    connection = new SqlConnection(connetionString); 
    string sql = "insert into record (name,marks) **values(?))";** 

    try 
    { 
     connection.Open(); 
     adapter.InsertCommand = new SqlCommand(sql, connection); 
     adapter.InsertCommand.ExecuteNonQuery(); 
     MessageBox.Show ("Row inserted !! "); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.ToString()); 
    } 
} 

private void insert_Click(object sender, EventArgs e) 
{ 
    InsertInfo(); 
} 
+2

使用參數: http://stackoverflow.com/questions/10718822/ado-net-how-to-add-parameter-if-i -use-connection-class-in-a-separate-file – 2013-02-25 08:21:44

+0

同意@AlexeyRaga。您的代碼容易受到SQL注入的攻擊。 – SchmitzIT 2013-02-25 08:26:52

+3

@SchmitzIT問題**中顯示的代碼不容易受到SQL注入的影響;它不顯示任何數據值被連接到TSQL。它顯示了一些不完整的SQL工作,但這很好 - 我們可以幫助解決這個問題。請不要危言聳聽。 – 2013-02-25 08:28:00

回答

2

沒有必要使用一個適配器這裏;那對你沒有幫助。剛:

var name = ... 
var marks = ... 
using(var conn = new SqlConnection(connectionString)) 
using(var cmd = conn.CreateCommand()) { 
    cmd.CommandText = "insert into record (name, marks) values (@name, @marks)"; 
    cmd.Parameters.AddWithValue("name", name); 
    cmd.Parameters.AddWithValue("marks", marks); 
    conn.Open(); 
    cmd.ExecuteNonQuery(); 
} 

或包含 「短小精悍」 的工具: '?'

var name = ... 
var marks = ... 
using(var conn = new SqlConnection(connectionString)) { 
    conn.Open(); 
    conn.Execute("insert into record (name, marks) values (@name, @marks)", 
     new {name, marks}); 
} 
0

那些被稱爲參數。從我的理解,你想要使用參數化查詢插入這是一個很好的方法,因爲它們可以幫助您避免SQL注入的機會。 '?'在您的查詢中唱歌時使用

OLEDBConnection &命令對象。

通常情況下,您將使用'@'符號在查詢中指定參數。不需要適配器。你剛纔

//Bind parameters 
// Open your Connection 
// Execute your query 
// Close connection 
// return result 

Parametrized queries 4 Guys from Rolla

MSDN: How to Protect from SQL injection in ASP.NET