4

我想开发使用数据库的应用程序。我在基于 Web 的数据库利用(mysql、pdo、mssql 和 php 和旧式 asp)方面经验丰富(作为业余爱好者),所以我的 SQL 知识相当不错。

我已经做过的事情..

  • 创建表单应用程序
  • 添加四个文本框(名字、姓氏、电子邮件、电话)
  • 添加了数据网格控件
  • 使用“Microsoft SQL Server 数据库文件 (SqlClient)”创建了数据库连接
  • 创建了一个表,其中的字段对应于四个文本框。

我现在想要做的是,当点击一个按钮时,使用 SQL 插入四个编辑框的内容。我不想使用任何对我隐藏 SQL 的“包装器”代码。我想尽可能地利用我在 SQL 方面的经验。

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

一个问题可能是 - 有没有比使用“Microsoft SQL Server 数据库文件”连接类型更好/更简单的方法(我使用它是因为它看起来是一种无需设置整个sql服务器)

4

2 回答 2

0

第一个示例是基于我认为更容易理解的总体视图,但由于易受 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 块中,以确保连接在出错时关闭。

我无法对此进行测试,但我认为没关系!

再次不要在现场执行上述操作,因为它允许 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 字符串即可选择或添加!

于 2012-11-26T14:19:11.040 回答
0

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

            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;
                }
            }
于 2012-11-26T14:42:58.213 回答