在您发表评论之前,请注意,我知道我的代码容易受到SQL注入的影响,为了简单起见,请忽略任何关于它容易受到攻击的评论
我已经在网站上查看了答案,但似乎没有一个适合我的情况,许多是PHP。
我正在尝试从Visual Studio 2012上的C#表单应用程序更新有关MySQL数据库的信息,因此我允许用户输入数据,但我希望他们能够更新其数据。
我尝试了各种不同的方法,很多都给我错误,我觉得我非常接近这种方法。
string Connection = "server = xxxx; " + "database = xxxxx; " + "uid = xxxx;"+ "pwd = xxxxx;";
MySqlConnection Conn = new MySqlConnection(Connection);
try
{
MySqlDataAdapter dAdapter = new MySqlDataAdapter("SELECT * FROM example", Conn);
DataTable dTable = new DataTable();
dAdapter.Fill(dTable);
DataRow dr = dTable.NewRow();
dr["TestData1"] = Convert.ToInt32(cboTestData1.Text);
dr["TestData2"] = txtTestData2.Text;
dr["TestData3"] = Convert.ToInt32(txtTestData3.Text);
dTable.Rows.Add(dr);
string Query = "Update example(field 1, field 2, field 3) VALUES ("TestData1", "TestData2", "TestData3")";
dTable.Rows.Add(Query);
MySqlCommandBuilder commandBuilder = new MySqlCommandBuilder(dAdapter);
int iRowsAffected = dAdapter.Update(dTable);
if (iRowsAffected == 1)
{
MessageBox.Show("Record Added", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("Error adding record", "Record Added", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
catch (MySqlException ex)
{
MessageBox.Show(ex.Message);
}
问题是它不喜欢"查询"代码,因为它不好。它给了我这个错误消息
其他信息:输入字符串不正确 格式。无法存储在 ID 列中。 预期 类型为 Int32。
我已经在互联网上寻找解决方案,但所有这些解决方案要么不提供与我相同的情况,要么与 PHP 代码有关。
更新查询的语法应为...
update SomeTable
set SomeField = NewValue,
AnotherField = AnotherValue
where
SomeKey = KeyIDTheUserWasWorkingWith
另外,对于将来,我知道这是示例数据/列,但您确实应该使用真实的表/列名称。 我们知道样本数据可以编造以防止机密性,但真实的结构更实用,以获得准确的答案。
插入语句更接近您拥有的内容,并且是...
insert into SomeTable
( fld1, fld2, fld3 )
values
( someFld1, anotherFld2, lastField )
最后,使用您的列名称,如果您这样做(但我从不这样做),则具有嵌入空格的列,请务必
`wrap in tic marks`
,因此引擎将整个字符串识别为列名。
我认为您的代码中存在一些混乱。
SELECT 语句可能会返回 4 个字段,例如:ID、TestData1、TestData2、TestData3。
然后,使用从数据库中检索到的记录填充数据表。
接下来,在数据表中创建一个新的数据行(该行将具有与 SELECT 语句匹配的四列)。您可以将值放入可编辑字段(而不是 ID 字段)中。
然后,将数据行添加到数据表中。
在这里,它被混淆了...
创建一个 SQL 更新查询字符串 - 然后将该字符串作为数据行添加到数据表中。
通过 MySqlDataAdapter 更新数据表时,最后一个数据行不是要由适配器解析的有效记录。
尝试删除以下两行:
string Query = "Update example(field 1, field 2, field 3) VALUES ("TestData1", "TestData2", "TestData3")";
dTable.Rows.Add(Query);