Tag: prepared statement

使用SQL预处理语句将结果绑定到C#中

使用这个: SqlConnection myConnection = new SqlConnection(“Data Source=.\\SERVER;Initial Catalog=DB;Integrated Security=True;TrustServerCertificate=True;User Instance=False”); myConnection.Open(); SqlCommand myCommand = new SqlCommand(“SELECT BusinessName FROM Businessess WHERE BusinessID = @Param2”, myConnection); SqlParameter myParam2 = new SqlParameter(“@Param2”, SqlDbType.Int, 4); myParam2.Value = 1; myCommand.Parameters.Add(myParam2); MessageBox.Show(myCommand); //How do I bind results to show as string? 如何将预准备语句的结果绑定到变量,以便我可以操作它们?

SqlCommand.Prepare方法要求所有参数都具有显式设置类型

我在我的WCF Web服务中有以下代码片段,它根据提供的字典值的格式构建一组where条件。 public static Dictionary[] VehicleSearch(Dictionary searchParams, int maxResults) { string condition = “”; foreach (string key in searchParams.Keys) { //Split out the conditional in case multiple options have been set (ie SUB;OLDS;TOY) string[] parameters = searchParams[key].Split(‘;’); if (parameters.Length == 1) { //If a single condition (no choice list) check for wildcards and use a […]

MySql:使用.NET / Connector,使用Prepared语句调用存储过程会更快吗?

我一直在阅读有关使用MySql的Prepared语句,并且.NET / Connector确实支持它们。 我想知道的是,如果我使用预准备语句来调用相同的存储过程数千次,那么是否比使用预准备语句更快或更好的性能(因为存储过程应该真的已经编译)? 例如: var mySqlCmd = new MySqlCommand(con, “call sp_someProcedure(@param1, @param2);”); mySqlCmd.Prepare(); mySqlCmd.Parameters.AddWithValue(“@param1”, “”); mySqlCmd.Parameters.AddWithValue(“@param2”, “”); for (int i = 0; i < 1000; i++) { mySqlCmd.Parameters["@param1"].Value = i.ToString(); mySqlCmd.Parameters["@param2"].Value = i.ToString(); mySqlCmd.ExecuteNonQuery(); }

C#准备语句 – @符号(at / strudel符号)查询

我在C#中准备好一个语句有问题: OdbcCommand cmd = sql.CreateCommand(); cmd.CommandText = “SELECT UNIQUE_ID FROM userdetails WHERE USER_ID = ?”; cmd.Parameters.Add(“@USER_ID”, OdbcType.VarChar, 250).Value = email; (当然电子邮件包含有效的电子邮件地址,带@符号)。 此代码返回随机错误 – “连接已被禁用”{“ERROR [01000] [Microsoft] [ODBC SQL Server驱动程序] [TCP / IP套接字] ConnectionWrite(send())。错误[08S01] [Microsoft] [ODBC SQL Server驱动程序] [TCP / IP套接字]常规网络错误。请检查您的网络文档。“} 但是,如果我在没有准备好的语句的情况下运行我的代码, cmd.CommandText = “SELECT UNIQUE_ID FROM userdetails WHERE USER_ID = ‘”+email+”‘”; 一切都很完美。 也许这与我在参数化值中有@符号的事实有关? 我倾向于认为我不是第一个尝试使用电子邮件地址创建预备声明的人… 我不知道出了什么问题! […]

在C#中使用Prepared语句与Mysql

我在我的程序中尝试了准备好的声明,但没有工作。 评论的部分是Prepared Statement部分。 当我将其改为正常陈述时,一切都是正确的。 有人能告诉我我错过了什么吗? 非常感谢。 private void btnLogin_Click(object sender, EventArgs e) { MySqlCommand cmd = MySqlConn.cmd; //cmd = new MySqlCommand(“SELECT * FROM admin WHERE admin_username=’@val1′ AND admin_password=PASSWORD(‘@val2’)”, MySqlConn.conn); //cmd.Prepare(); //cmd.Parameters.AddWithValue(“@val1”, tboxUserName.Text); //cmd.Parameters.AddWithValue(“@val2”, tboxPassword.Text); cmd = new MySqlCommand(“SELECT * FROM admin WHERE admin_username='”+tboxUserName.Text+”‘ AND admin_password=PASSWORD(‘”+tboxPassword.Text+”‘)”, MySqlConn.conn); MySqlDataReader res = cmd.ExecuteReader(); if (!res.HasRows) { MessageBox.Show(“Error! “); […]

如何在C#.NET(SQL Server)中正确有效地重用预准备语句?

我看了很多问题,但显然我的SO-fu不能胜任这个任务,所以我在这里。 我正在尝试有效地使用预准备语句,我不仅仅意味着参数化单个语句,而是编译一个语句以便重复使用多次。 我的问题在于参数和重用以及如何正确实现。 一般来说,我遵循这个程序(人为的例子): SqlConnection db = new SqlConnection(…); SqlCommand s = new SqlCommand(“select * from foo where a=@a”, db); s.Parameters.Add(“@a”, SqlDbType.VarChar, 8); s.Prepare(); … s.Parameters[“@a”] = “bozo”; s.Execute(); 超级,有效。 但是,每次运行此查询时,我都不想执行所有这些步骤(或后四个步骤)。 这似乎抵消了准备陈述的整个想法。 在我看来,我只需要更改参数并重新执行,但问题是如何做到这一点? 我尝试了s.Parameters.Clear() ,但这实际上删除了参数本身,而不仅仅是值,所以我基本上需要重新Add参数并重新Prepare ,这似乎也打破了整点。 不用了,谢谢。 在这一点上,我留下了迭代s.Parameters并将它们全部设置为null或其他值。 它是否正确? 不幸的是,在我目前的项目中,我有~15个参数的查询需要执行〜每次运行10,000次。 我可以将这个迭代分流成一个方法但是想知道是否有更好的方法来做到这一点(没有存储过程)。 我目前的解决方法是一个扩展方法, SqlParameterCollection.Nullify ,它将所有参数设置为null,这对我的情况很好。 我只是在执行后运行它。 我发现了一些几乎完全相同但(恕我直言)尚未解答的问题: 准备语句和.NET中的内置连接池 SQLite / C#连接池和准备语句混淆 (Serge非常接近回答!) 我能找到的最佳答案是(1)上面的常识和(2)这个页面: http://msdn.microsoft.com/en-us/magazine/cc163799.aspx