MySQL/C#插入问题
不知道这是怎么回事MySQL/C#插入问题,c#,mysql,C#,Mysql,不知道这是怎么回事 //Setup MySQL private MySqlConnection datconnection = new MySqlConnection(); //private MySqlDataAdapter datdata = new MySqlDataAdapter(); DataGrid datgridInfo = new DataGrid(); int connect; private Form_NewEnquiry frm_pa
//Setup MySQL
private MySqlConnection datconnection = new MySqlConnection();
//private MySqlDataAdapter datdata = new MySqlDataAdapter();
DataGrid datgridInfo = new DataGrid();
int connect;
private Form_NewEnquiry frm_parent;
public Form_AddVenue(Form_NewEnquiry frm1)
{
InitializeComponent();
frm_parent = frm1;
}
private void btnAdd_Click(object sender, EventArgs e)
{
connect = 0;
try
{
datconnection.ConnectionString =
"server=127.0.0.1;"
+ "database=as;"
+ "uid=a;"
+ "password=a;";
connect = 1;
}
catch (Exception)
{
MessageBox.Show("Connection Unavailable");
}
//INSERT SQL Code to Insert Venue
if (connect == 1)
{
try
{
datconnection.Open();
MySqlCommand command = new MySqlCommand("INSERT INTO venues (venue_name,venue_address1,venue_address2,venue_town,venue_county,venue_postcode,venue_telephone,venue_fax,venue_email,venue_web,venue_maxguests) VALUES (?,?,?,?,?,?,?,?,?,?,?)", datconnection);
command.Parameters.Add("name", MySqlDbType.VarChar, 45, tbName.Text.ToString());
command.Parameters.Add("address1", MySqlDbType.VarChar, 45, tbAddress1.Text.ToString());
command.Parameters.Add("address2", MySqlDbType.VarChar, 45, tbAddress2.Text.ToString());
command.Parameters.Add("town", MySqlDbType.VarChar, 45, tbTown.Text.ToString());
command.Parameters.Add("county", MySqlDbType.VarChar, 45, tbCounty.Text.ToString());
command.Parameters.Add("postcode", MySqlDbType.VarChar, 10, tbPostcode.Text.ToString());
command.Parameters.Add("telephone", MySqlDbType.VarChar, 15, tbTelephone.Text.ToString());
command.Parameters.Add("fax", MySqlDbType.VarChar, 15, tbFax.Text.ToString());
command.Parameters.Add("email", MySqlDbType.VarChar, 255, tbEmail.Text.ToString());
command.Parameters.Add("web", MySqlDbType.VarChar, 255, tbWeb.Text.ToString());
command.Parameters.Add("maxguests", MySqlDbType.Int32, 11, nudNoOfGuests.Value.ToString());
command.ExecuteNonQuery();
//datdata.InsertCommand = command;
}
catch (Exception eea)
{
MessageBox.Show("Error storing data");
MessageBox.Show(eea.ToString());
connect = 0;
}
finally
{
datconnection.Close();
}
}
if (connect == 1)
{
MessageBox.Show("Data Saved");
//Print
//Close Window
frm_parent.reloadVenue();
this.Close();
}
}
这给了我一个错误System.FormatException:索引(基于零)必须大于或等于零且小于参数列表的大小。某些数据的大小似乎大于您指定的参数的大小。比如说
command.Parameters.Add("name", MySqlDbType.VarChar, 45, tbName.Text);
tbName.Text字符串的大小小于45。那么使用
command.Parameters.Add("name", MySqlDbType.VarChar, tbName.Text.Length, tbName.Text);
某些数据的大小似乎大于您指定的参数的大小。比如说
command.Parameters.Add("name", MySqlDbType.VarChar, 45, tbName.Text);
tbName.Text字符串的大小小于45。那么使用
command.Parameters.Add("name", MySqlDbType.VarChar, tbName.Text.Length, tbName.Text);
您不需要Text属性上的ToString(),它已经是字符串了,请避免使用它 也 这需要一个int参数,您要传入一个字符串,请使用Convert.ToInt32传入值
通常,这些错误是由于声明和传递给命令的参数数量不同而发生的,但在您的情况下似乎没有问题。什么类型的控件是nudNoOfGuests可能是导致格式错误的原因您不需要文本属性上的ToString(),它已经是一个字符串,请避免使用它 也 这需要一个int参数,您要传入一个字符串,请使用Convert.ToInt32传入值
通常,这些错误是由于声明和传递给命令的参数数量不同而发生的,但在您的情况下似乎没有问题。什么类型的控件是nudNoOfGuests可能是导致格式错误的原因哪一行引发异常?在
命令处。ExecuteNonQuery()代码>我通过在不使用command.Parameters.Add的情况下对SQL字符串进行编码解决了这个问题(相反,SQL字符串将值串联在一起。我知道这样做会有SQL注入的风险,但是这只是一个小的内部系统。哪一行引发异常?在命令.ExecuteNonQuery()处);
我通过在不使用command.Parameters.Add的情况下对SQL字符串进行编码(而是将SQL字符串的值连接起来。我知道这样做会有SQL注入的风险,但是这只是一个小型的内部系统。嘿,感谢您的帮助-但是.Value.ToString()必须作为参数存在。Add始终希望第四个参数是字符串。将其更改为命令.Parameters.Add(“maxguests”,MySqlDbType.Int32,11,10);
抛出一个“参数4无法从int转换为字符串”我同意,但是,ToString()文本属性上不需要-force of habbitSo nudNoOfGuests返回一个有效值?是-但是,即使在此故障扫描中硬编码一个整数字符串,您也可以通过将参数更改为?name、?address1、?address2…等等来尝试相同的操作嘿,感谢您的帮助-但是.value.ToString()必须作为参数存在。Add始终希望第四个参数是字符串。将其更改为命令.Parameters.Add(“maxguests”,MySqlDbType.Int32,11,10);
抛出一个“参数4无法从int转换为字符串”我同意,但是,ToString()文本属性上不需要-force of habbitSo nudNoOfGuests返回一个有效值?是-但是,即使在此故障扫描中硬编码一个整数字符串,您也可以通过将参数更改为?name、?address1、?address2…等来尝试相同的操作您好,谢谢您-但是,当更改相同的错误时,会抛出。我使用了静态长度这是MySQL的长度,因此当值比MySQL可以接受的长度长时会抛出一个适当的异常。您好,谢谢您,但是当更改时会抛出相同的错误。我在这里使用了静态长度,因为这是MySQL的长度,因此当值比MySQL的长度长时会抛出一个适当的异常接受