C#sql相关异常
我试图做一个简单的C#windows应用程序作为初学者。但我得到一个System.Data.SqlClient.SqlException
。当我尝试连接到数据库时,它说连接正常。但它不允许我使用visual studio创建任何表格。我不明白为什么它不显示添加新表的选项。 这是我的代码。C#sql相关异常
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 System.Data.SqlClient;
namespace best
{
public partial class Form1 : Form
{
SqlConnection con=new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Janith Kularathne\Documents\testing.mdf;
Integrated Security=True;Connect Timeout=30");
public Form1()
{
InitializeComponent();
}
private void insertB_Click(object sender, EventArgs e)
{
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "Insert into details values('"+ idBox.Text +"', '"+ nameBox.Text + "')";
cmd.ExecuteNonQuery();
con.Close();
idBox.Text = "";
nameBox.Text="";
DisplayDetails();
MessageBox.Show("Insertion succesfull");
}
private void deleteB_Click(object sender, EventArgs e)
{
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "Delete from details where id= '" + idBox.Text + "')";
cmd.ExecuteNonQuery();
con.Close();
idBox.Text = "";
nameBox.Text = "";
DisplayDetails();
MessageBox.Show("delete succesfull");
}
private void updateB_Click(object sender, EventArgs e)
{
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "update details set id, name,category where id= '" + idBox.Text + "')";
cmd.ExecuteNonQuery();
con.Close();
idBox.Text = "";
nameBox.Text = "";
DisplayDetails();
MessageBox.Show("Update succesfull");
}
private void searchB_Click(object sender, EventArgs e)
{
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "selet *from details where id= '" + idBox.Text + "')";
cmd.ExecuteNonQuery();
con.Close();
DisplayDetails();
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
DisplayDetails();
}
public void DisplayDetails()
{
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select * from details";
cmd.ExecuteNonQuery();
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
dataGridView1.DataSource = dt;
con.Close();
}
}
你的代码目前包含了各种不同的问题,我将详细一点上,应该解决一些当前的问题:
- 不必要的右括号
- 拼写错误和拼写错误
- 语法错误
- 使用参数
除此之外,我强烈建议阅读一些使用不同方法的教程,例如使用ExecuteNonQuery()
,ExecuteReader()
和ExecuteNonScalar()
等不同方法来确定在执行查询时如何实际检索查询中的值。
不必要的右括号
您现在有一个尾随关闭您SELECT
,UPDATE
和DELETE
查询中内每个查询的括号这很可能导致一个语法错误:
// Notice the unnecessary trailing ')', which should only be useful within your INSERT call
cmd.CommandText = "..." + idBox.Text + "')";
错别字和拼写错误
附加类型PO是您的搜索查询以及单词“选择”中存在拼写错误:
// "selet" should be "Select"
cmd.CommandText = "selet *from details where id= '" + idBox.Text + "')";
语法错误
您当前UPDATE
查询不会实际上似乎做任何事情。您正在使用SET
关键字,但不是实际的值设置为任何事情:
// UPDATE queries should be in the form UPDATE {table} SET {Column} = {Value} WHERE ...
cmd.CommandText = "update details set id, name,category where id= '" + idBox.Text + "')";
参数,不串联
此外,你真的应该考虑建立查询使用时参数。它可以帮助避免SQL注入等不良情况,并防止语法错误。
你可以看到的是什么,这可能看起来像是为你的方法下面一个例子:当我输入'0'
private void searchB_Click(object sender, EventArgs e)
{
con.Open();
var query = "SELECT * FROM details WHERE ID = @id";
using(var cmd = new SqlCommand(query, connection))
{
cmd.Parameters.AddWithValue("@id",idBox.Text);
using(var reader = cmd.ExecuteReader())
{
// Access your results here and do something with them
}
}
}
难道你不应该将帖子标记为offtopic,并强制用户做出自己的作业,而不是为他提供这些错误的答案吗? –
公平点。但是,如果这是OP的工作,那么他/她显然试图实施这些并遇到各种类型的错误。我只是在谈论一些做错的事情,以及如何纠正这些事情。 –
由于这是使用传递查询,我建议不要使用AddWithValue。它有时可能会导致数据类型错误。在这种情况下最好使用明确的类型参数。 http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/ –
会发生什么事; Drop table细节; '进入'idBox'? –