gpt4 book ai didi

c#程序sql语法错误

转载 作者:太空宇宙 更新时间:2023-11-03 12:01:32 25 4
gpt4 key购买 nike

我正在尝试创建一个从 mysql 数据库 (db) 返回值数组的程序。该程序将接收用户输入并将其拆分为子字符串,之后将子字符串与数据库进行比较并返回一个值数组。但是我仍然无法让它正常工作。我的循环功能或标签有问题吗?这是程序代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace jawiFin
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
MySqlConnection myConn = new MySqlConnection("datasource=localhost;port=3306;username=root;password=971476");

MySqlCommand mcd;
MySqlDataReader mdr;
string s;
private void button1_Click(object sender, EventArgs e)
{

string strValue = textBox1.Text;
string[] strArray = strValue.Split(',',' ');
foreach (object obj in strArray)
{
myConn.Open();

s = "select * from database01.employeeinfo where name='" + this.textBox1.Text + "';";
mcd = new MySqlCommand(s, myConn);
mdr = mcd.ExecuteReader();
if (mdr.Read())
{

trans.Text += mdr.GetString("surname");

}
else
{
MessageBox.Show("error");
}
mdr.Close();
myConn.Close();
}
}
}
}

最佳答案

想象一下,this.textBox1.Text 包含一个带有撇号的名称,比如 O'Connor。现在你的 SQL 有语法错误:

select * from database01.employeeinfo where name='O'Connor'
-- ^^^^^^^

然而,这是相当无辜的;想想如果名字是会发生什么

bobby';delete database01.employeeinfo;--

看看这如何删除您的 employeeinfo 表?这称为 SQL 注入(inject)攻击。不要那样做!改用参数化 SQL 语句:

s = "select * from database01.employeeinfo where name=@name";
mcd = new MySqlCommand(s, myConn);
mcd.Parameters.Add("@name", SqlDbType.String);
mcd.Parameters["@name"].Value = this.textBox1.Text;

关于c#程序sql语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28926495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com