Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql插入c#windows窗体_C#_Sql_Windows_Forms_Winforms - Fatal编程技术网

Sql插入c#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";

我正在处理一个带有sql数据库的windows窗体项目。我想写一些数据,但我不能。(代码没有给出任何错误,但是没有写入任何数据。 下面的代码是我想要写入数据的地方:

 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),您将耗尽可用的连接。使用代码包装可以缓解此问题。