Sql插入c#windows窗体
我正在处理一个带有sql数据库的windows窗体项目。我想写一些数据,但我不能。(代码没有给出任何错误,但是没有写入任何数据。 下面的代码是我想要写入数据的地方:Sql插入c#windows窗体,c#,sql,windows,forms,winforms,C#,Sql,Windows,Forms,Winforms,我正在处理一个带有sql数据库的windows窗体项目。我想写一些数据,但我不能。(代码没有给出任何错误,但是没有写入任何数据。 下面的代码是我想要写入数据的地方: public static string stringConnection = @"Data Source=(localdb)\MSSQLLocalDB; AttachDbFilename=|DataDirectory|\POS.mdf; Integrated Security=True";
public static string stringConnection = @"Data Source=(localdb)\MSSQLLocalDB; AttachDbFilename=|DataDirectory|\POS.mdf; Integrated Security=True";
try
{
mySql = string.Empty;
mySql += "INSERT INTO Journal (Date) VALUES (" + "'"+ caisse + "'"+")" ;
connection.exsql(mySql);
}
catch(Exception exx)
{
MessageBox.Show(exx.ToString());
}
下面是connection.exsql方法:
public static void exsql(string sql)
{
SqlConnection connection = new SqlConnection();
SqlDataAdapter adapter = default(SqlDataAdapter);
try
{
connection.ConnectionString = stringConnection;
connection.Open();
adapter = new SqlDataAdapter(sql, connection);
connection.Close();
//connection = null;
}
catch (Exception ex)
{
MessageBox.Show("Fatal sql error: " + ex.Message, "Sql Server connection failed", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
您希望使用
sqlCommand
并执行.ExecuteNonQuery()
执行插入或更新
更多信息
另外,请使用参数化(上面的链接中显示了一个示例),否则,如果变量包含一个引号,您的代码将失败
SqlConnection con;
SqlCommand cmd;
public bool exsql(string query)
{
try {
con = null;
con = new SqlConnection(ConnectionString.path);
cmd = new SqlCommand(query, con);
con.Open();
var rowEffected = cmd.ExecuteNonQuery();
con.Close();
if(rowEffected>0)
{
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Exception occurred !",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
您可以通过ExecuteNonQuery()函数执行查询,代码更少
private bool exsql(string query)
{
using(var conn = new SqlConnection(ConnectionString.path))
{
conn.Open();
using (var command = new SqlCommand(query, conn))
return command.ExecuteNonQuery() == 0 ? false : true;
}
}
您没有执行任何命令,您只是打开一个连接并创建一个适配器,但什么也不做。研究
ExecuteNonQuery
这也是在.NET应用程序中处理数据的一种非常古老的方法。现在的方法是使用实体框架,尽管它的代码更多,但从长远来看效果更好。始终使用参数这是为了避免sql注入和格式错误。您的exsql
方法没有提供这方面的功能。@MatthewLayton该语句非常不完整。您不应该只将这样的信息告诉新程序员,他们会认为这是全世界最好的事情。事实上,这不仅仅是更多的代码,而是对数据性能的巨大影响rmance在我见过的所有案例中都是如此。我们每年都在转换几十个运行在EF上的业务应用程序,这些应用程序比普通SQL服务的速度快了10倍以上。也许在纸面上看起来不错,但事实告诉我,在过去8年中,我们一直在转换这些应用程序,这是有效的代码;但是,如果RowImpfected=cmd.ExecuteOnQuery();失败,永远不会调用con.Close()。如果执行此操作的次数足够多(>100),您将耗尽可用的连接。使用代码包装可以缓解此问题。