SQL从不同语句中插入变量

时间:2011-07-05 07:40:25

标签: c# asp.net sql

      StringBuilder sb = new StringBuilder();
    sb.Append("DECLARE @ControlPaneliD int");
    sb.Append(" SET @ControlPaneliD=(SELECT ControlPanelID");
    sb.Append(" FROM ControlPanelID");
    sb.Append(" WHERE Name=@Name)");

    sb.Append("DECLARE @UserName UniqueIdentifier");
    sb.Append(" SET @UserName=(SELECT Name");
    sb.Append(" FROM UsersID");
    sb.Append(" WHERE UsersID=@UserID)");

    sb.Append("INSERT INTO dbo.CP_Comments (ControlPanelID,Comments,Commentator)");
    sb.Append(" VALUES(@ControlPaneliD,@Comment,@UserName)");
    MembershipUser CurrentUser = Membership.GetUser();
    Guid id = (Guid)CurrentUser.ProviderUserKey;

    string myConnectionString = AllQuestionsPresented.connectionString;
    using (SqlConnection conn = new SqlConnection(AllQuestionsPresented.connectionString))
    {
        conn.Open();
        SqlCommand cmd = new SqlCommand(sb.ToString(), conn);
        cmd.Parameters.Add("UserID", SqlDbType.UniqueIdentifier).Value = id;
        cmd.Parameters.Add("Comment", SqlDbType.NVarChar).Value = TextBox1.Text;
        cmd.Parameters.Add("Name", SqlDbType.NVarChar).Value = name; //string variable from my code
        cmd.ExecuteNonQuery();

    }

我正在尝试做两个select语句,将结果放入变量中,并将其变量加上另一个变量插入另一个插入语句中。

我不确定我是否做得对,如果你给我一些建议和批评我的作品,我将不胜感激。

4 个答案:

答案 0 :(得分:2)

  1. 在insert语句中,将3个参数插入2列。
  2. 我认为您应该编写存储过程并为其传递参数。你总是用字符串生成器“生成”sql代码。并且更改存储过程中的某些功能比在代码中查找语句,更改它并重建应用程序要容易得多。
  3. SELECT ControlPanelID FROM ControlPanelID WHERE Name=@NameSELECT Name FROM UsersID WHERE UsersID=@UserID看起来很奇怪。你真的有名字ControlPanelIDUsersID
  4. 的表格

答案 1 :(得分:1)

您的方法看起来不错,但建议您使用存储过程而不是传递查询

答案 2 :(得分:1)

这非常容易受到SQL注入攻击,尤其是这部分:

cmd.Parameters.Add("Comment", SqlDbType.NVarChar).Value = TextBox1.Text;

这非常非常危险。我无法想象你没有听说过这个,但为了以防万一,看看这篇wiki文章:http://en.wikipedia.org/wiki/SQL_injection

如果您确实需要/需要执行原始SQL,请始终转义值。

您是否考虑使用LINQ2SQL,DataEntities等强类型DAL?

答案 3 :(得分:0)

我宁愿建议将该代码放在存储过程中。将它放在字符串构建器中并执行它并不是一个好主意。