C# 如何使用command.Parameters.AddWithValue和value?
我的代码如下:C# 如何使用command.Parameters.AddWithValue和value?,c#,mysql,C#,Mysql,我的代码如下: if (!string.IsNullOrEmpty(Mpdue.TheObjectPropertyNameNs)) { string sql = @String.Format(" SELECT * FROM doTable WHERE dOCode IN ('" + Mpdue.TheObjectPropertyNameNs + "'); "); using (OdbcConnection myConnectionString = new Od
if (!string.IsNullOrEmpty(Mpdue.TheObjectPropertyNameNs))
{
string sql = @String.Format(" SELECT * FROM doTable WHERE dOCode IN ('" + Mpdue.TheObjectPropertyNameNs + "'); ");
using (OdbcConnection myConnectionString =
new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnMySQL"].ConnectionString))
{
using (OdbcCommand command =
new OdbcCommand(sql, myConnectionString))
{
try
{
command.Connection.Open();
using (OdbcDataReader reader = command.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
Response.Write(reader["dOCode"].ToString() + "<br />");
}
}
}
}
catch (Exception ex)
{
throw new ApplicationException("operation failed!", ex);
}
finally
{
command.Connection.Close();
}
}
}
}
if (!string.IsNullOrEmpty(Mpdue.TheObjectPropertyNameNs))
{
var parameters = new string[Mpdue.TheObjectPropertyNameNs.Length];
string sql = @String.Format(" SELECT * FROM doTable WHERE dOCode IN ({0})", string.Join(", ", parameters));
using (OdbcConnection myConnectionString =
new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnMySQL"].ConnectionString))
{
using (OdbcCommand command =
new OdbcCommand(sql, myConnectionString))
{
try
{
command.Connection.Open();
for (int i = 0; i < Mpdue.TheObjectPropertyNameNs.TrimStart('\'').TrimEnd('\'').Length; i++)
{
parameters[i] = string.Format("param1{0}", i);
command.Parameters.AddWithValue(parameters[i], Mpdue.TheObjectPropertyNameNs.TrimStart('\'').TrimEnd('\'')[i]);
}
using (OdbcDataReader reader = command.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
Response.Write(reader["dOCode"].ToString() + "<br />");
}
}
}
}
catch (Exception ex)
{
throw new ApplicationException("operation failed!", ex);
}
finally
{
command.Connection.Close();
}
}
}
}
现在我尝试在MySql查询中使用command.Parameters.AddWithValue
我一直在尝试,但找不到错误,use command.Parameters.AddWithValue时的输出为空,为什么
if (!string.IsNullOrEmpty(Mpdue.TheObjectPropertyNameNs))
{
string sql = @String.Format(" SELECT * FROM doTable WHERE dOCode IN (?); ");
using (OdbcConnection myConnectionString =
new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnMySQL"].ConnectionString))
{
using (OdbcCommand command =
new OdbcCommand(sql, myConnectionString))
{
try
{
command.Connection.Open();
command.Parameters.AddWithValue("param1", Mpdue.TheObjectPropertyNameNs);
using (OdbcDataReader reader = command.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
Response.Write(reader["dOCode"].ToString() + "<br />");
}
}
}
}
catch (Exception ex)
{
throw new ApplicationException("operation failed!", ex);
}
finally
{
command.Connection.Close();
}
}
}
}
编辑1
我的新代码如下:
if (!string.IsNullOrEmpty(Mpdue.TheObjectPropertyNameNs))
{
string sql = @String.Format(" SELECT * FROM doTable WHERE dOCode IN ('" + Mpdue.TheObjectPropertyNameNs + "'); ");
using (OdbcConnection myConnectionString =
new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnMySQL"].ConnectionString))
{
using (OdbcCommand command =
new OdbcCommand(sql, myConnectionString))
{
try
{
command.Connection.Open();
using (OdbcDataReader reader = command.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
Response.Write(reader["dOCode"].ToString() + "<br />");
}
}
}
}
catch (Exception ex)
{
throw new ApplicationException("operation failed!", ex);
}
finally
{
command.Connection.Close();
}
}
}
}
if (!string.IsNullOrEmpty(Mpdue.TheObjectPropertyNameNs))
{
var parameters = new string[Mpdue.TheObjectPropertyNameNs.Length];
string sql = @String.Format(" SELECT * FROM doTable WHERE dOCode IN ({0})", string.Join(", ", parameters));
using (OdbcConnection myConnectionString =
new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnMySQL"].ConnectionString))
{
using (OdbcCommand command =
new OdbcCommand(sql, myConnectionString))
{
try
{
command.Connection.Open();
for (int i = 0; i < Mpdue.TheObjectPropertyNameNs.TrimStart('\'').TrimEnd('\'').Length; i++)
{
parameters[i] = string.Format("param1{0}", i);
command.Parameters.AddWithValue(parameters[i], Mpdue.TheObjectPropertyNameNs.TrimStart('\'').TrimEnd('\'')[i]);
}
using (OdbcDataReader reader = command.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
Response.Write(reader["dOCode"].ToString() + "<br />");
}
}
}
}
catch (Exception ex)
{
throw new ApplicationException("operation failed!", ex);
}
finally
{
command.Connection.Close();
}
}
}
}
错误:
错误[42000][MySQL][ODBC 5.1驱动程序][mysqld-5.5.24-log]您有一个
SQL语法错误;检查与您的产品相对应的手册
MySQL服务器版本,以便在“,,”附近使用正确的语法,
在第1行
为了解决此问题,您可以将查询更改为以下字符串:
SELECT * FROM doTable WHERE FIND_IN_SET(dOCode, ?)
然后,您需要确保参数设置为D410、D420、D430、D440的形式。因此,您可以在第一种方法中构建它,如
var paramValue = string.Join(", ", parameters);
以后再添加
command.Parameters.AddWithValue("param1", paramValue);
请注意,在_集中使用FIND_可能会对性能产生负面影响,因为它将扫描整个表,而不考虑索引。另一种方法是在查询中插入n个参数,然后分别添加每个参数,例如
string sql = string.Format("SELECT * FROM doTable WHERE dOCode IN ({0})", string.Join(", ", parameters.Select(x => "?")));
// ...
int index = 0;
foreach(var param in parameters)
{
command.Parameters.AddWithValue($"param{index}", param);
index++;
}
如果预期的参数数量不太多,这是一种可行的方法。为了解决这个问题,您可以将查询更改为以下字符串:
SELECT * FROM doTable WHERE FIND_IN_SET(dOCode, ?)
然后,您需要确保参数设置为D410、D420、D430、D440的形式。因此,您可以在第一种方法中构建它,如
var paramValue = string.Join(", ", parameters);
以后再添加
command.Parameters.AddWithValue("param1", paramValue);
请注意,在_集中使用FIND_可能会对性能产生负面影响,因为它将扫描整个表,而不考虑索引。另一种方法是在查询中插入n个参数,然后分别添加每个参数,例如
string sql = string.Format("SELECT * FROM doTable WHERE dOCode IN ({0})", string.Join(", ", parameters.Select(x => "?")));
// ...
int index = 0;
foreach(var param in parameters)
{
command.Parameters.AddWithValue($"param{index}", param);
index++;
}
如果预期的参数数量不太多,这是一种可行的方法。在c中尝试此方法。我希望我能帮上忙
if (!string.IsNullOrEmpty(Mpdue.TheObjectPropertyNameNs))
{
var paramValue = string.Join(", ", Mpdue.TheObjectPropertyNameNs);
string sql = string.Format("SELECT * FROM doTable WHERE dOCode IN ({0})", paramValue.ToString());
...
foreach (var param in paramValue)
{
command.Parameters.AddWithValue("param1", param.ToString());
}
...
}
试试c中的这个。我希望我能帮上忙
if (!string.IsNullOrEmpty(Mpdue.TheObjectPropertyNameNs))
{
var paramValue = string.Join(", ", Mpdue.TheObjectPropertyNameNs);
string sql = string.Format("SELECT * FROM doTable WHERE dOCode IN ({0})", paramValue.ToString());
...
foreach (var param in paramValue)
{
command.Parameters.AddWithValue("param1", param.ToString());
}
...
}
问题可能是在第一种方法中插入一个值列表,如“a”、“B”,而在使用AddWithValue时,只将所有值插入一个以“a.B”结尾的参数中。也许这个问题有帮助:事实上,你在一个母版页中做这件事只意味着你在错误的地方做了它,与你的问题无关,我不知道ODBC对象是否会和SQL一样工作,但是这可能是有帮助的:考虑使用DaPerter。问题可能是在第一种方法中插入一个值列表,如“a”、“B”,而在使用AddWithValue时,只将所有值插入一个以“a.B”结尾的参数中。也许这个问题有帮助:事实上,你在一个母版页中做这件事只意味着你在错误的地方做了它,与你的问题无关,我不知道ODBC对象是否会和SQL一样工作,但是这可能是有帮助的:考虑使用DaPerter。谢谢,但是新的错误现在是错误[HY001][MySQL][ODBC 5.1驱动程序][mysqld-5.5.24-log]内存分配错误参数是'D410','D430','D440','D420'我在编辑2中的新代码在我的第一个问题中,谢谢-@ChevyMarkSunderland也许你可以检查以下内容:你有$in.AddWithValue$param{index},param;?参数在参数中使用后不需要引号。参数有引号吗?参数中没有引号。。。@Hamamel回复上的代码在我的情况下运行…谢谢,但是新的错误现在是错误[HY001][MySQL][ODBC 5.1驱动程序][mysqld-5.5.24-log]内存分配错误参数是'D410'、'D430'、'D440'、'D420'。在我的第一个问题中,我在编辑2中的新代码,谢谢-@chevymarks,也许你可以检查一下:你有$in.AddWithValue$param{index},param;?参数在参数中使用后不需要引号。参数有引号吗?参数中没有引号。。。@hamamel回复上的代码在我的案例中起作用。。。