2016-11-01 33 views
0

我想建立这个网站使用SQL参数。我以为我遵循了我给出的例子,但是我的sql数据显示'@username'和'number',而不是已经放入文本框的值。试图让sql参数工作

我很难过。

感谢您的帮助

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.Security; 
using System.Data; 
using System.Data.SqlClient; 

public partial class management_Default : System.Web.UI.Page 
{ 

    public void runsql(string sqlCmdTxt, bool adduserbool) 
    { 
     SqlConnection sqlConnection = new SqlConnection("Server=DELLXPS\\SQLEXPRESS; Initial Catalog=Warren_SEINDATASYSTEMS; Integrated Security=true;"); 
     SqlCommand cmd = new SqlCommand(); 
     SqlDataReader reader; 

     cmd.CommandText = sqlCmdTxt; 
     cmd.CommandType = CommandType.Text; 
     cmd.Connection = sqlConnection; 

     //If statement uses adduserbool param to determine if the code needs to make sql params for users 
     if (adduserbool == true) 
     { 
      SqlParameter user = new SqlParameter(); 
      user.ParameterName = "@username"; 
      user.Value = CreateUserWizard1.UserName.Trim(); 
      cmd.Parameters.Add(user); 

      if (txtboxNumberOfVisitors.Text != "") 
      { 
       SqlParameter number = new SqlParameter(); 
       number.ParameterName = "@number"; 
       number.Value = txtboxNumberOfVisitors.Text; 
       cmd.Parameters.Add(number); 
      } 
      else 
      { 
       // this else will send "2" if the text box is empty 
       SqlParameter number = new SqlParameter(); 
       number.ParameterName = "@number"; 
       number.Value = "2"; 
       cmd.Parameters.Add(number); 
      } 
     } 

     sqlConnection.Open(); 

     //cmd.ExecuteScalar(); 

     reader = cmd.ExecuteReader(); 

     sqlConnection.Close(); 

     //if user was created, clear number of visitors text box 
     if (adduserbool == true) 
     { 
      txtboxNumberOfVisitors.Text = ""; 
     } 
    } 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e) 
    { 
     //Add residents to resident role 
      Roles.AddUserToRole(CreateUserWizard1.UserName, "resident"); 
      runsql("INSERT INTO [dbo].[NumberOfVisitors] ([ResidentName],[NumberOfVisitors]) VALUES ('@username','@number')", true); 

    } 

} 

回答

0

那是因为你把周围的参数名称报价在您的SQL INSERT语句。所以SQL认为它是一个文字字符串,而不是对参数的引用。

试试这个:

runsql("INSERT INTO [dbo].[NumberOfVisitors] ([ResidentName],[NumberOfVisitors]) VALUES (@username,@number)", true); 
+0

哇。我不敢相信我做到了。我想我的问题是在代码中,甚至没有看我的字符串。谢谢 – birdseed

+0

只是为了公平起见,上午6点,我一直在工作通宵 – birdseed

1

你必须忽略在SQL语句中的',因为它不是一个字符串,而是一个参数:

runsql("INSERT INTO [dbo].[NumberOfVisitors] ([ResidentName],[NumberOfVisitors]) VALUES (@username,@number)", true); 
+0

哇。我不敢相信我做到了。我想我的问题是在代码中,甚至没有看我的字符串。谢谢 – birdseed

+0

只是为了公平起见,早上6点,我一直在工作 – birdseed