Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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
C# 如何在Microsoft Visual Studio 2012中使用本地数据库文件添加/编辑/检索数据_C#_Sql_Visual Studio 2012 - Fatal编程技术网

C# 如何在Microsoft Visual Studio 2012中使用本地数据库文件添加/编辑/检索数据

C# 如何在Microsoft Visual Studio 2012中使用本地数据库文件添加/编辑/检索数据,c#,sql,visual-studio-2012,C#,Sql,Visual Studio 2012,我想开始开发使用数据库的应用程序。作为一名业余爱好者,我对基于web的数据库利用mysql、pdo、mssql以及php和旧式asp有相当丰富的经验,因此我的SQL知识相当不错 我已经做过的事情 创建表单应用程序 添加四个文本框:姓名、电子邮件、电话 添加了datagrid控件 使用“Microsoft SQL Server数据库文件SqlClient”创建了数据库连接 创建了一个表,其中包含与四个文本框对应的字段。 我现在想做的是,单击按钮时,使用SQL插入四个编辑框的内容。我不想使用任何对我

我想开始开发使用数据库的应用程序。作为一名业余爱好者,我对基于web的数据库利用mysql、pdo、mssql以及php和旧式asp有相当丰富的经验,因此我的SQL知识相当不错

我已经做过的事情

创建表单应用程序 添加四个文本框:姓名、电子邮件、电话 添加了datagrid控件 使用“Microsoft SQL Server数据库文件SqlClient”创建了数据库连接 创建了一个表,其中包含与四个文本框对应的字段。 我现在想做的是,单击按钮时,使用SQL插入四个编辑框的内容。我不想使用任何对我隐藏SQL的“包装器”代码。我希望尽可能多地利用我在SQL方面的经验

因此,我想我要问的是,我现在如何编写必要的代码来运行SQL查询以插入该数据。显然,我不需要知道SQL代码,只需要知道使用“本地数据库文件”连接来运行SQL查询的c代码


另一个问题可能是-有没有比使用“Microsoft SQL Server数据库文件”连接类型更好/更简单的方法?我使用过它,因为它看起来是一种不必设置整个SQL Server的方法这不是一种推荐的方法,因为SQL注入漏洞是一种更好的方法。不过,我觉得这更容易理解

private void InsertToSql(string wordToInsert)
  {
        string connectionString = Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI; User ID=myDomain\myUsername;Password=myPassword;

        string queryString = "INSERT INTO table_name (column1) VALUES (" + wordToInsert + ")"; //update as you feel fit of course for insert/update etc

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open()
        SqlDataAdapter adapter = new SqlDataAdapter();
        SqlCommand command = new SqlCommand(queryString, connection);        

        command.ExecuteNonQuery();
        connection.Close();
    }
}
我还建议将其包装在try/catch块中,以确保连接在出错时关闭

我不能测试这个,但我认为它是好的

同样,不要在live中执行上述操作,因为它允许SQL注入-而是使用参数。然而,有人可能会说,如果你是PHP背景的,只是为了适应环境,那么做上述工作就容易多了

这将使用以下参数:

public void Insert(string customerName)
{
try
   {
    string connectionString = Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI; User ID=myDomain\myUsername;Password=myPassword;

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
    connection.Open();
    connection.Open() SqlCommand command = new SqlCommand( "INSERT INTO Customers (CustomerName" + "VALUES (@Name)", connection);

    command.Parameters.Add("@Name", SqlDbType.NChar, 50, " + customerName +");
    command.ExecuteNonQuery();
    connection.Close();
    }
 catch()
 {
     //Logic in here
 }
 finally()
 {
    if(con.State == ConnectionState.Open)
    {
        connection.Close();
    }
 }
}


然后您只需将SQL字符串更改为select或add

下面是使用参数插入数据,我认为这是一种更好的方法:

            var insertSQL = "INSERT INTO yourTable (firstName, lastName, email, phone) VALUES (firstName, lastName, email, phone)";

            string connectionString = "Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI; User ID=userid;Password=pwd;"

            using (var cn = new SqlCeConnection(connectionString))
            using (var cmd = new SqlCeCommand(insertSQL, cn))
            {
                cn.Open();

                cmd.Parameters.Add("firstName", SqlDbType.NVarChar);
                cmd.Parameters.Add("lastName", SqlDbType.NVarChar);
                cmd.Parameters.Add("email", SqlDbType.NVarChar);
                cmd.Parameters.Add("phone", SqlDbType.NVarChar);

                cmd.Parameters["firstName"].Value = firstName;
                cmd.Parameters["lastName"].Value = lastName;
                cmd.Parameters["email"].Value = email;
                cmd.Parameters["phone"].Value = phone;
                cmd.ExecuteNonQuery();

            }
这是从数据库中选择数据并填充datagridview:

            var dt = new DataTable();

            string connectionString = "Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI; User ID=userid;Password=pwd;"

            using (var cn = new SqlCeConnection(connectionString )
            using (var cmd = new SqlCeCommand("Select * From yourTable", cn))
            {
                cn.Open();

                using (var reader = cmd.ExecuteReader())
                {
                    dt.Load(reader);

                    //resize the DataGridView columns to fit the newly loaded content.
                    yourDataGridView.AutoSize = true;                                       yourDataGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);

                    //bind the data to the grid
                    yourDataGridView.DataSource = dt;
                }
            }

关于StackOverflow可能是一个更好的问题。不要转载,因为这可能会被编辑过你的标题的版主移动。请看,如果共识是否定的,他们就不应该这样。这很奇怪-我以为我一开始就把它发布到stackoverflow上了。我熟悉使用PDO的php参数化查询,所以来自php背景并不否定这一点:我今晚到我的PC上时会尝试这段代码。酷-不是为了光顾,当我来自VBScript的时候,我真的很挣扎,所以我想我会尽力帮上忙:请注意,上面的代码没有经过测试,因为我目前不在开发区。别担心,我不认为这是一种恩惠。我一直在尝试各种方法来让连接正常工作。我正在尝试连接到本地数据库文件。我只是在建立与SQL Server的连接时不断发现与网络相关或特定于实例的错误。找不到服务器或无法访问服务器。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。提供程序:命名管道提供程序,错误:40-无法打开到SQL Server的连接我错误地认为“本地数据库文件”连接类型不需要运行SQL实例。我想要一些“零配置”。当我发现它确实需要一个sql实例时,我切换到了SQLCE选项。当我不能让它工作时,我想出了如何让sqlite工作的方法,现在我正在使用它。