2013-02-25 52 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