2016-11-01 78 views
0

我已经成功创建了数据库连接,但现在我在插入数据时遇到问题。这里是我的代码:通过C在sql中插入数据#

String Connection = null; 
SqlConnection con; 
SqlCommand cmd; 
String sql = null; 
Connection="Data Source=DELL\\SQLEXPRESS; initial Catalog= BSSE;Integrated Security=True"; 
con = new SqlConnection(Connection); 
sql = "INSERT INTO Records (Roll_No,Name,Marks) VALUES (" + textBox1.Text + "," + textBox2.Text + "," + textBox3.Text + ");"; 
try 
{ 
    con.Open(); 
    cmd = new SqlCommand(sql, con); 
    cmd.ExecuteNonQuery(); 
    MessageBox.Show ("Success of data insertion "); 
    cmd.Dispose(); 
    con.Close(); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show("Can not open connection ! "); 
} 
+0

那么,SQL注入的问题,也是不正确的SQL ... – Prisoner

+0

也许你可以学习这一个:http://stackoverflow.com/a/5480368/1050927 – Prisoner

回答

1

首先,您的SQL语句不正确。您缺少值字段之间的单引号。稍后,您通过使用字符串连接来构建SQL语句,这很危险,因为可能会暴露给SQL Injection。改为使用Parameterized Query

try 
{ 
    con.Open(); 
    cmd = new SqlCommand("INSERT INTO Records (Roll_No,Name,Marks) VALUES (@rollNo, @Name, @Marks)", con); 
    cmd.Parameters.AddWithValue("@rollNo", textBox1.Text); 
    cmd.Parameters.AddWithValue("@Name", textBox2.Text); 
    cmd.Parameters.AddWithValue("@Marks", textBox3.Text); 
    cmd.ExecuteNonQuery(); 

    MessageBox.Show ("Success of data insertion "); 
    cmd.Dispose(); 
    con.Close(); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show("Can not open connection ! "); 
} 
+0

非常感谢。这是行得通的。 – Iqra

+0

不客气。请勾选绿色勾号将其标记为答案。 – Hermanto

0
  • 检查您的连接字符串。我通常把它写成:

    string Connection = @“Data Source = DELL \ SQLEXPRESS; Initial Catalog = BSSE; Integrated Security = true”;

  • 如果滚动号码应该是一个整数,你需要解析 它。

    int.Parse(textBox1.Text)

0

我建议使用,而不是从C#应用程序发送的SQL代码块存储过程,这里是对SQL存储过程的一个参考:https://msdn.microsoft.com/en-us/library/ms190782.aspx。您可以通过向查询中添加参数而不是纯文本来减少SQL注入的可能性,同时您也需要验证输入。您也可以使用参数创建呼叫。有很多方法可以从C#调用SQL数据库查询,下面是有关存储过程的更多信息,可以提供线索:http://csharp-station.com/Tutorial/AdoDotNet/Lesson07