従業員が更新する必要があるデータベースにCRMテーブルがあります。私はWindowsフォームを使用してSQL接続を使用してそれらをリンクしていますが、sytanxがキー 'In'の近くで間違っているというエラーが発生し続けています。あなたは閉じ括弧を配置すると、カラムの値のための「'」文字を置くのを忘れC#でSQL接続を使用してテーブルにデータを追加
string sql = "INSERT INTO Trafico (Nombre, Apedillo, Correo, Teléfono, Como, Comercial, Tipo, Contacto,Inteserado En) Values('" + nombreTextBox.Text + "','" + apedilloTextBox.Text + "','" + correoTextBox.Text + "','" + teléfonoTextBox.Text + "','" + comoComboBox.Text + "','" + comercialComboBox.Text + "','" + tipoComboBox.Text + "','" + contactoComboBox.Text + "','" + inteserado_EnComboBox.Text + "')";
:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace WindowsFormsApplication1
{
public partial class Form1 : MetroFramework.Forms.MetroForm
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'traficoDataSet.Inteserado_En' table. You can move, or remove it, as needed.
this.inteserado_EnTableAdapter.Fill(this.traficoDataSet.Inteserado_En);
// TODO: This line of code loads data into the 'traficoDataSet.Contacto' table. You can move, or remove it, as needed.
this.contactoTableAdapter.Fill(this.traficoDataSet.Contacto);
// TODO: This line of code loads data into the 'traficoDataSet.Tipo' table. You can move, or remove it, as needed.
this.tipoTableAdapter.Fill(this.traficoDataSet.Tipo);
// TODO: This line of code loads data into the 'agora_UsuariosDataSet.Usuarios' table. You can move, or remove it, as needed.
this.usuariosTableAdapter.Fill(this.agora_UsuariosDataSet.Usuarios);
// TODO: This line of code loads data into the 'traficoDataSet.Como' table. You can move, or remove it, as needed.
this.comoTableAdapter.Fill(this.traficoDataSet.Como);
// TODO: This line of code loads data into the 'traficoDataSet.Trafico' table. You can move, or remove it, as needed.
this.traficoTableAdapter.Fill(this.traficoDataSet.Trafico);
}
private void button1_Click(object sender, EventArgs e)
{
SqlConnection cn = new SqlConnection(global::WindowsFormsApplication1.Properties.Settings.Default.TraficoConnectionString);
try
{
string sql = "INSERT INTO Trafico ('Nombre', 'Apedillo', 'Correo', 'Teléfono', 'Como', 'Comercial', 'Tipo', 'Contacto','Inteserado En') Values(" + nombreTextBox.Text + "," + apedilloTextBox.Text + "," + correoTextBox.Text + "," + teléfonoTextBox.Text + "," + comoComboBox.Text + "," + comercialComboBox.Text + "," + tipoComboBox.Text + "," + contactoComboBox.Text + ","+inteserado_EnComboBox.Text+"";
SqlCommand exeSql = new SqlCommand(sql, cn);
cn.Open();
exeSql.ExecuteNonQuery();
this.traficoTableAdapter.Fill(this.traficoDataSet.Trafico);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
これは非常に[SQLインジェクション](https://en.wikipedia.org/wiki/SQL_injection)する傾向があります。 [parameters]または[stored procs]を使用して調べる必要があります。(https://www.owasp.org/index.php/Query_Parameterization_Cheat_Sheet) – BJones
これは、SQLインジェクションだけでなく、多くの理由でこれに同意します。 – JSON
このinsert文にはいくつか問題があります。列名は一重引用符で囲むべきではありません(もちろん、それらの2つを角括弧で囲む必要があります)。あなたは本当にボビーのテーブル(http://bobby-tables.com/)を避けるために値をパラメータ化する必要があります。 SQLインジェクションルートを主張する場合は、文字列リテラルのときに値を一重引用符で囲む必要があります。 –