我正在尝试使用Visual Basic 2012上的C#创建注册页面。当我调试时,我得到0错误,但是当我尝试注册帐户时,我收到以下错误。
“语法附近不正确”)'“
如果我尝试使用现有用户名创建帐户,则表示该用户名已存在。所以我能够连接到SQL服务器,但我不确定我哪里出错了。
此注册页面应在我的数据库DNMembership>中创建帐户。表>帐户
这是我正在使用的代码。
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["RegDNMembershipConnectionString"].ConnectionString);
con.Open();
string insCmd = "Insert into Accounts (AccountName, Passphrase, EmailAddress, FullName, Country)";
SqlCommand insertUser = new SqlCommand(insCmd, con);
insertUser.Parameters.AddWithValue("@AccountName", TextBoxUN.Text);
insertUser.Parameters.AddWithValue("@Passphrase", TextBoxPass.Text);
insertUser.Parameters.AddWithValue("@EmailAddress", TextBoxEA.Text);
insertUser.Parameters.AddWithValue("@FullName", TextBoxFN.Text);
insertUser.Parameters.AddWithValue("@Country", DropDownListCountry.SelectedItem.ToString());
try
{
insertUser.ExecuteNonQuery();
con.Close();
Response.Redirect("Login.aspx");
}
catch(Exception er)
{
Response.Write("<b>Something Really Bad Happened... Please Try Again.< /br></b>");
Response.Write(er.Message);
}
我做错了什么?
答案 0 :(得分:8)
您似乎忘了在INSERT
命令中添加VALUES
部分。
VALUES
介绍要插入的数据值列表。 必须 如果指定,则为column_list中每列的一个数据值 表格。值列表必须括在括号中。
更改您的SQL查询,如;
string insCmd = @"Insert into Accounts (AccountName, Passphrase, EmailAddress, FullName, Country)
VALUES(@AccountName, @Passphrase, @EmailAddress, @FullName, @Country)";
并使用using
statement处理您的SqlConnection
和SqlCommand
之类的内容;
using(SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["RegDNMembershipConnectionString"].ConnectionString))
{
using(SqlCommand insertUser = new...)
{
//Your code..
}
}
答案 1 :(得分:3)
您没有在SQL或VALUES
部分中指定任何参数 - 您说“我想插入这些字段......”但不是 你想要插入。它应该是这样的:
string insCmd =
"Insert into Accounts (AccountName, Passphrase, EmailAddress, FullName, Country) "
+ "Values (@AccountName, @Passphrase, @EmailAddress, @FullName, @Country");
答案 2 :(得分:1)
您需要更改SQL语句:
string insCmd = "Insert into Accounts (AccountName, Passphrase, EmailAddress, FullName, Country) VALUES (@AccountName,@Passphrase,@EmailAddress,@FullName,@Country)";
答案 3 :(得分:1)
您缺少Insert
声明的一部分
INSERT INTO table (col1, col2) VALUES (@col1, @col2)
或者,如果要将所有值按顺序插入列中
INSERT INTO table VALUES (@col1, @col2)
答案 4 :(得分:0)
SQL Server中有INSERT
命令的几种替代方法。
指定COLUMNS
,然后指定VALUES
INSERT INTO TABLE(AccountName, Passphrase, EmailAddress, FullName, Country)
VALUES ('AccountName', 'Passphrase', 'EmailAddress', 'FullName', 'Country')
string insCmd = "INSERT INTO TABLE(AccountName, Passphrase, EmailAddress, FullName, Country)
VALUES (@AccountName, @Passphrase, @EmailAddress, @FullName, @Country)"
如果您确定列的顺序可以跳过指定列,那么如果您将VALUES
的顺序搞砸,则会将值插入错误的列
INSERT INTO TABLE VALUES ('AccountName', 'Passphrase', 'EmailAddress', 'FullName', 'Country')
string insCmd = "INSERT INTO TABLE VALUES (@AccountName, @Passphrase, @EmailAddress, @FullName, @Country)"
阅读的资源很好
INSERT INTO TABLE
的替代方法,您可以调用插入表中的C#
存储过程。使用存储过程可以帮助您减少即席查询,帮助防止SQL注入,减少网络流量,添加额外的验证服务器端。您的代码如下所示。
SqlCommand cmd = new SqlCommand("usp_InsertIntoAccount", con);
con.Open();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@AccountName", TextBoxUN.Text));
cmd.Parameters.Add(new SqlParameter("@Passphrase", TextBoxPass.Text));
cmd.Parameters.Add(new SqlParameter("@EmailAddress", TextBoxEA.Text));
cmd.Parameters.Add(new SqlParameter("@FullName", TextBoxFN.Text));
cmd.Parameters.Add(new SqlParameter("@Country", DropDownListCountry.SelectedItem.ToString()));
try
{
cmd.ExecuteNonQuery();
con.Close();
Response.Redirect("Login.aspx");
}
catch(Exception er)
{
Response.Write("<b>Something Really Bad Happened... Please Try Again.< /br></b>");
Response.Write(er.Message);
}
列出了其他资源