SQL从不同的语句插入变量
本文关键字:语句 插入 变量 SQL | 更新日期: 2023-09-27 18:01:15
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();
}
我试图做两个选择语句,把他们的结果在他们的变量和插入他们的变量加上另一个变量到另一个插入语句..
我不确定我做得对不对,如果你能给我一些建议和批评,我将非常感谢你的帮助
- 在insert语句中,您将3个参数插入到2列中。我认为你应该编写存储过程并为它传递参数。你总是用字符串生成器"生成"sql代码。更改存储过程中的某些功能比在代码中查找语句,更改它并重新构建应用程序要容易得多。
-
SELECT ControlPanelID FROM ControlPanelID WHERE Name=@Name
和SELECT Name FROM UsersID WHERE UsersID=@UserID
看起来很奇怪。你们真的有名称为ControlPanelID
和UsersID
的表吗?
您的方法看起来不错,但建议您使用存储过程而不是传递查询
这很容易受到sql注入的攻击,尤其是这一部分:
cmd.Parameters.Add("Comment", SqlDbType.NVarChar).Value = TextBox1.Text;
这是非常非常危险的。我无法想象你没有听说过这个,但以防万一,看看这篇维基文章:http://en.wikipedia.org/wiki/SQL_injection
如果你真的想要/需要执行原始SQL,总是转义值。
你是否考虑过使用强类型的数据库,如LINQ2SQL、DataEntities等?
我建议将该代码放在存储过程中。这不是一个好主意,把它放在一个字符串生成器和执行它