0

我打开了一个表单,它在复选框中加载了某种数据(如用户名、CNIC、联系方式等),现在我想以这样的方式更新数据,我只需更改文本框中的文本并单击保存更改以保存它。我已经尝试过了,但我无法以正确的方式做到这一点。

让我向您展示我是如何编码的,我在 frmViewformList savechanges 按钮中所做的代码是:

private void btnSaveChanges_Click(object sender, EventArgs e)
{
    string sql;
    string UserName;


    UserName = txtUserName.Text; // saving data loaded on run time to UserName 

    sql = "";
    sql += "UPDATE UserLogin";
    sql += "SET Name = "+ //how to access data I've changed in TextBox after loading +"";
    sql += "WHERE Name= " + //how to access data which was in text box right after loading + "";  //
}

我对如何引用数据有点困惑,比如文本框中已经存在的名称或我已更改的名称以及如何在 SQL 查询中编写它......

我知道这个问题有点令人困惑。让我解释; 表单已加载,有一些文本框在加载事件时填充了数据库中的数据,我更改了文本框中的数据并在单击时保存,以便更新查询运行并更改数据库中的数据。我无法在这里创建逻辑如何做到这一点,任何人都可以帮助我,对不起,我是 C# 的新开发人员,这就是为什么我有点困惑。

4

3 回答 3

3

您应该使用 Sql 参数以避免 SQL 注入,这可能会使您的数据库容易受到恶意攻击。

最好将执行更新的逻辑与创建查询的逻辑分开,这样您就不必重复代码,从而可以更轻松地维护代码。

这是您可以参考的示例:

public void DoWork()
{
    // Build Query Use @Name Parameters instead of direct values to prevent SQL Injection
    StringBuilder sql = new StringBuilder();
    sql.Append("UPDATE UserLogin");
    sql.Append("SET Name = @UpdatedName");
    sql.Append("WHERE Name = @Name");

    // Create parameters with the value you want to pass to SQL
    SqlParameter name = new SqlParameter("@Name", "whatEverOldNameWas");
    SqlParameter updatedName = new SqlParameter("@UpdatedName", txtUserName.Text);

    Update(sql.ToString(), new [] { name, updatedName });
}

private static readonly string connectionString   = "Your connection string"
private static readonly DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient");

public static int Update(string sql, SqlParameter[] parameters)
{
    try
    {
        using (DbConnection connection = factory.CreateConnection())
        {
            connection.ConnectionString = connectionString;
            using (DbCommand command = factory.CreateCommand())
            {
                command.Connection  = connection;
                command.CommandText = sql;

                foreach (var parameter in parameters)
                {
                    if (parameter != null)
                        command.Parameters.Add(parameter);
                }

                connection.Open();
                return command.ExecuteNonQuery();
            }
        }
    }
    catch (Exception)
    {
        throw;
    }
}
于 2013-08-20T15:36:20.193 回答
0

您将需要从输入中删除所有 '、" 和 ` 字符,这样人们就无法注入 SQL。当您这样做时 SET Name = " +,您实际上需要将包含在引号中的任何内容都包含在引号中,因为它是一个字符串:SET Name = '" + UserName "' " +...

这可能最好使用

string.Format("UPDATE UserLogin SET Name = '{0}' WHERE Name = '{1}'", UserName, FormerUserName);

然后您将执行您的查询using System.Data.SqlClient;,然后使用 SqlConnection 建立与服务器的连接,并执行SqlCommand某种类型的;看看: http: //www.codeproject.com/Articles/4416/Beginners-guide-to-accessing-SQL-Server-through-C

于 2013-08-20T15:21:35.293 回答
0

以下是使用 ADO.NET 将数据插入数据库并假设 SQL Server 数据库的代码片段。

在您的 .cs 文件的顶部,您应该有。

using System.Data.SqlClient;  // for sql server for other data bases you should use OleClient instead.

在您的按钮单击事件中,您可以放置​​以下内容。

    // to know how to get the right connection string please check this site: http://www.connectionstrings.com
    string connString = "database connection string here";

    using (SqlConnection con = new SqlConnection(connString)) 
    {
        con.Open();
        //insert text into db
        string sql_insert = "INSERT INTO ....."; // Use parameters here.
        SqlCommand cmd_insert = new SqlCommand(sql_insert, con);
        int rowsAffected = cmd_insert.ExecuteNonQuery();    
    }

希望这足以让您入门。

于 2013-08-20T15:27:49.977 回答