你的查询有很多问题。
这是您的代码的修改版本
string connetionString = null;
string sql = null;
// All the info required to reach your db. See connectionstrings.com
connetionString = "Data Source=UMAIR;Initial Catalog=Air; Trusted_Connection=True;" ;
// Prepare a proper parameterized query
sql = "insert into Main ([Firt Name], [Last Name]) values(@first,@last)";
// Create the connection (and be sure to dispose it at the end)
using(SqlConnection cnn = new SqlConnection(connetionString))
{
try
{
// Open the connection to the database.
// This is the first critical step in the process.
// If we cannot reach the db then we have connectivity problems
cnn.Open();
// Prepare the command to be executed on the db
using(SqlCommand cmd = new SqlCommand(sql, cnn))
{
// Create and set the parameters values
cmd.Parameters.Add("@first", SqlDbType.NVarChar).Value = textbox2.text;
cmd.Parameters.Add("@last", SqlDbType.NVarChar).Value = textbox3.text;
// Let's ask the db to execute the query
int rowsAdded = cmd.ExecuteNonQuery();
if(rowsAdded > 0)
MessageBox.Show ("Row inserted!!" + );
else
// Well this should never really happen
MessageBox.Show ("No row inserted");
}
}
catch(Exception ex)
{
// We should log the error somewhere,
// for this example let's just show a message
MessageBox.Show("ERROR:" + ex.Message);
}
}
- 列名包含空格(应该避免),因此您需要在它们周围加上方括号
- 您需要使用该
using
语句来确保将关闭连接并释放资源
- 您将控件直接放在字符串中,但这不起作用
- 您需要使用参数化查询来避免引用问题和 sqlinjiection 攻击
- 无需使用 DataAdapter 进行简单的插入查询
- 不要使用 AddWithValue,因为它可能是错误的来源(请参阅下面的链接)
除此之外,还有其他潜在的问题。如果用户没有在文本框控件中输入任何内容怎么办?在尝试插入之前,您是否对此进行过任何检查?正如我所说,字段名称包含空格,这会给您的代码带来不便。尝试更改这些字段名称。
此代码假定您的数据库列的类型为 NVARCHAR,如果不是,则使用适当的SqlDbType 枚举值。
请计划尽快切换到 NET Framework 的更新版本。1.1 现在真的过时了。
而且,关于 AddWithValue 问题,这篇文章解释了为什么我们应该避免它。我们可以停止使用 AddWithValue() 了吗?