【发布时间】:2018-05-23 10:57:14
【问题描述】:
在浏览了这个网站一段时间后,我开始编写一段代码,将一组文本框中的信息添加到预设数据库中。
代码如下:
string connString = "Provider=Microsoft.ACE.OLEDB.12.0;data source=[[Rather not release private information, but trust me, this part works]]";
var _ID = LblID.Text;
var _FirstName = TxtUsername.Text;
var _LastName = TxtPassword.Text;
var _DOB = TxtFirstName.Text;
var _Number1 = TxtLastName.Text;
var _Number2 = TxtDOB.Text;
var _Email = TxtNumber2.Text;
var _Username = TxtEmail.Text;
var _Password = TxtNumber1.Text;
using (OleDbConnection conn = new OleDbConnection(connString))
{
OleDbCommand cmd = new OleDbCommand("INSERT into Users ([_ID], [_FirstName], [_LastName], [_DOB], [_Number1], [_Number2], [_Email], [_Username], [_Password]) Values(@ID Number, @First Name, @Last Name, @Date of Birth, @Phone Number 1, @Phone Number 2, @Email, @Username, @Password)");
cmd.Connection = conn;
conn.Open();
if (conn.State == ConnectionState.Open)
{
cmd.Parameters.Add("@ID Number", OleDbType.VarChar).Value = _ID;
cmd.Parameters.Add("@First Name", OleDbType.VarChar).Value = _FirstName;
cmd.Parameters.Add("@Last Name", OleDbType.VarChar).Value = _LastName;
cmd.Parameters.Add("@Date of Birth", OleDbType.VarChar).Value = _DOB;
cmd.Parameters.Add("@Phone Number 1", OleDbType.VarChar).Value = _Number1;
cmd.Parameters.Add("@Phone Number 2", OleDbType.VarChar).Value = _Number2;
cmd.Parameters.Add("@Email", OleDbType.VarChar).Value = _Email;
cmd.Parameters.Add("@Username", OleDbType.VarChar).Value = _Username;
cmd.Parameters.Add("@Password", OleDbType.VarChar).Value = _Password;
try
{
cmd.ExecuteNonQuery();
MessageBox.Show("Data Added");
conn.Close();
}
catch (OleDbException ex)
{
MessageBox.Show(ex.Message);
conn.Close();
}
}
else
{
MessageBox.Show("Connection Failed");
}
}
有点长,但请留在我这里。
此代码与我从previous question 的答案中找到的代码非常相似,当然还有重命名变量等以将代码集成到我的应用程序中。
但是,在逐步分解应用程序如何处理此问题后,这里似乎失败了:
try
{
cmd.ExecuteNonQuery();
MessageBox.Show("Data Added");
conn.Close();
}
更具体地说,是 cmd.ExecuteNonQuery()。
try 似乎在这部分停止了,直接跳到了 catch 处。
我的问题是,我做错了什么?我把这件事搞砸到什么程度?
如果您需要任何细节,请发表评论,我会尽快回复。
提前致谢。
编辑 1:忘记添加错误消息,我深表歉意。
“查询表达式'@ID Number'中的语法错误(缺少运算符)。”
编辑 2:不确定这是否应该是一个编辑,但现在我遇到了一个全新的问题。
阅读 cmets 后,我更改了区域名称(在应用程序和数据库中),现在我收到一条全新的错误消息。
“INSERT INTO 语句包含以下未知字段名称:'_ID'。”
我感觉其他人也会抱怨。
很抱歉给您带来了麻烦。
【问题讨论】:
-
乍一看,我怀疑参数名称中不允许有空格。 JET 无法解析。但为了有机会获得有用的答案,请将完整的异常信息添加到您的问题中。
-
尝试在
cmd.Parameters.Add...行和查询本身中删除参数名称中的空格(即使用@IDNumber而不是@ID Number) -
“直接跳到捕获”,这时你会遇到一个异常,里面充满了有用的调试信息。请分享留言等。
-
对此表示歉意,我将在问题中添加错误消息。关于命名,我是否也应该重命名数据库中的列?只做@ID_Number 会起作用吗?
-
@LtWub:你应该避免在列名中使用空格。您可以使用下划线,也可以使用 PascalCase,无论您喜欢哪一种……但不能使用空格!