- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图有一个函数,可以在给定参数时在数据库中搜索项目(在本例中为主板),但如果没有给出参数,我希望能够获取所有主板。
查询是:
SELECT * FROM motherboard WHERE slot_type_cpu LIKE @cpu_slot AND hdd_num > @hdd_num AND sata_gen LIKE @sata_gen AND ram_pins LIKE @ram_pins AND ram_type LIKE @ram_gen AND ram_num > @ram_num AND gpu_num > @gpu_num AND gpu_slot LIKE @gpu_slot AND usb_num > @usb_num AND usb_gen LIKE @usb_gen;
这是当前功能:
public Motherboard[] getMBs(string cpu_slot = "%", string gpu_slot = "%", string hdd_gen = "%", string sata_gen = "%", string ram_gen = "%", string usb_gen = "%", int hdd_num = 0, int ram_pins = 0, int ram_num = 0, int gpu_num = 0, int usb_num = 0)
{
try
{
Motherboard[] mbList = new Motherboard[96];
Motherboard[] finishedList = new Motherboard[96];
MySqlConnection connect = new MySqlConnection(CONNECTION_STRING);
MySqlCommand useCmd = connect.CreateCommand();
MySqlCommand getMBCmd = connect.CreateCommand();
MySqlCommand getItemInfoCmd = connect.CreateCommand();
useCmd.CommandText = "use " + DEFAULT_DB + ";";
getMBCmd.CommandText = GET_MB_CMD;
getItemInfoCmd.CommandText = GET_ITEM_INFO_CMD;
connect.Open();
useCmd.ExecuteNonQuery();
getMBCmd.Parameters.AddWithValue("@cpu_slot", cpu_slot);
getMBCmd.Parameters.AddWithValue("@hdd_num", hdd_num);
getMBCmd.Parameters.AddWithValue("@sata_gen", sata_gen);
getMBCmd.Parameters.AddWithValue("@gpu_slot", gpu_slot);
getMBCmd.Parameters.AddWithValue("@hdd_gen", hdd_gen);
getMBCmd.Parameters.AddWithValue("@ram_gen", ram_gen);
getMBCmd.Parameters.AddWithValue("@usb_gen", usb_gen);
getMBCmd.Parameters.AddWithValue("@ram_pins", ram_pins);
getMBCmd.Parameters.AddWithValue("@ram_num", ram_num);
getMBCmd.Parameters.AddWithValue("@gpu_num", gpu_num);
getMBCmd.Parameters.AddWithValue("@usb_num", usb_num);
MySqlDataReader reader = getMBCmd.ExecuteReader();
reader.Read();
//Here comes the trouble part.
if (reader.HasRows)
{
int i = 0;
while (reader.HasRows)
{
mbList[i] = new Motherboard(reader.GetString(0), "", "", 0.00, 0, reader.GetString(1), reader.GetString(3), new RAM("", "", "", 0, 0, reader.GetString(5), reader.GetInt32(4), 0), reader.GetString(8), reader.GetInt32(2), reader.GetInt32(6), reader.GetInt32(7), reader.GetInt32(10), reader.GetInt32(11), reader.GetInt32(12));
i++;
reader.Read();
}
}
reader.Close();
//It doesn't retrieve any items, even though I can retrieve them manually using the same query...
int y = 0;
foreach (Motherboard m in mbList)
{
getItemInfoCmd.Parameters.AddWithValue("@id", m.id()); //This gives an Object reference not set to an instance of an object error
reader = getItemInfoCmd.ExecuteReader();
reader.Read();
if (reader.HasRows)
finishedList[y] = new Motherboard(m.id(), reader.GetString(3), reader.GetString(4), reader.GetDouble(1), reader.GetFloat(2), m.CPU_Slot(), m.HDD_Conn(), m.RAM(), m.GPU_Slot(), m.HDD_num(), m.RAM_num(), m.GPU_num(), m.USB_num(), m.USB_gen(), m.CPU_num());
reader.Close();
getItemInfoCmd.Parameters.Clear();
}
connect.Close();
return finishedList;
}
catch (Exception e)
{
Error error = new Error();
error.reportError(e.Message.ToString() + " " + e.StackTrace.ToString(), DateTime.Now.ToString(), "ItemRetrieval.getMBs: { } ");
return null;
}
编辑:(我如何修复它)我最终做了什么并且效果很好(这可能就是 aleroot 的意思,但我无法解读他们所说的内容......抱歉。):
if (cpu_slot == "%")
getMBCmd.CommandText = getMBCmd.CommandText.Replace("@cpu_slot", "\'%\'");
else
getMBCmd.Parameters.AddWithValue("@cpu_slot", cpu_slot);
if(gpu_slot == "%")
getMBCmd.CommandText = getMBCmd.CommandText.Replace("@gpu_slot", "\'%\'");
else
getMBCmd.Parameters.AddWithValue("@gpu_slot", gpu_slot);
if(hdd_gen == "%")
getMBCmd.CommandText = getMBCmd.CommandText.Replace("@hdd_gen", "\'%\'");
else
getMBCmd.Parameters.AddWithValue("@hdd_gen", hdd_gen);
if(sata_gen == "%")
getMBCmd.CommandText = getMBCmd.CommandText.Replace("@sata_gen", "\'%\'");
else
getMBCmd.Parameters.AddWithValue("@sata_gen", sata_gen);
if (ram_gen == "%")
getMBCmd.CommandText = getMBCmd.CommandText.Replace("@ram_gen", "\'%\'");
else
getMBCmd.Parameters.AddWithValue("@ram_gen", ram_gen);
getMBCmd.Parameters.AddWithValue("@usb_gen", usb_gen);
getMBCmd.Parameters.AddWithValue("@hdd_num", hdd_num);
getMBCmd.Parameters.AddWithValue("@ram_pins", ram_pins);
getMBCmd.Parameters.AddWithValue("@ram_num", ram_num);
getMBCmd.Parameters.AddWithValue("@gpu_num", gpu_num);
getMBCmd.Parameters.AddWithValue("@usb_num", usb_num);
最佳答案
您可以传递 %
通配符作为主板的默认参数,因此如果您设置为默认 %
并使用类似的过滤器,在缺少主板参数的情况下您将获得所有主板...
关于C# MySqlParameter 通配符搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8281761/
我试图有一个函数,可以在给定参数时在数据库中搜索项目(在本例中为主板),但如果没有给出参数,我希望能够获取所有主板。 查询是: SELECT * FROM motherboard WHERE slot
您好,我发现了这个在 C# 中向 MySQL 命令添加值的代码片段 MySqlCommand command = connection.CreateCommand(); command.Command
我想使用 MySqlParameter 将 tableName 传递到查询中(以防止 slq 注入(inject)) MySqlCommand cmd = new MySqlCommand("sele
我关注了this试图设置与 MySQL 的连接并运行准备好的语句的线程(在线程中他们谈论的是 Postgresql 的细微差别)。这就是我所做的: IDbConnection cnx = new
我在 MySql 数据库中有一个存储用户帐户的表。其中一列 expires 存储到期日期,但默认为 NULL。我需要能够删除到期日期并将其设置回默认值。 目前,我所有的 CRUD 例程都是使用带参数的
我研究了这个问题,但没有找到切实可行的解决方案。供您引用,我使用我们的通用库类进行连接,从未遇到过这样的问题。而且我想说项目在我的本地 PC 上成功运行,但在服务器上运行失败。 这是我得到错误的代码片
我正在尝试使用新值更新行中的列。新值位于变量中,并且该值中包含新行。此方法接收需要更改的列名称和值作为字典,并创建动态更新命令。 该代码适用于表中的任何其他行,但是当涉及换行符时,SQL 错误显示:您
我的代码出现以下异常 You have an error in your SQL syntax; check the manual that corresponds to your MySQL ser
我创建了一个方法,它将抛出的任何异常插入到 MySql 服务器上“ExceptionLog”的表中。 异常日志表格式 idExceptionLog int (AI)用户(varchar 45)错误消息
我有一个 DAL.EntityFramework 项目,其中安装了 Pomelo.EntityFrameworkCore.MySql 包。我还有一个 DAL.MySQL 包,其中安装了 MySql.D
我的代码会有什么问题?我遇到错误 AddWithValue 不是 MySql.Data.MySqlClient.MySqlParameter 的成员 这是我的代码: Dim bn As Str
例如我有这个查询 MySQL_Query = "UPDATE `owner_info` " _ & "SET isArchived = 1 " _ & "WHERE id=@o
我遇到了一个相当奇怪的问题。 我们有一个 MySql 数据库在我们的 C#/Asp.Net 网络应用程序后面运行。 我们为每个查询使用参数以防止 SQL 注入(inject)攻击。 但是,我们最近从一
我是一名优秀的程序员,十分优秀!