如何使用C#.net更新表中的数据
我打开了一个表单,它在复选框中加载了一些数据(如用户名、CNIC、联系人号码等),现在我想以这样的方式更新数据,我只需更改文本框中的文本,然后单击保存更改以保存它。我已经试过了,但我不能用正确的方式做 让我向您展示我是如何编码的,我在frmViewformList savechanges按钮中所做的代码是:如何使用C#.net更新表中的数据,c#,winforms,C#,Winforms,我打开了一个表单,它在复选框中加载了一些数据(如用户名、CNIC、联系人号码等),现在我想以这样的方式更新数据,我只需更改文本框中的文本,然后单击保存更改以保存它。我已经试过了,但我不能用正确的方式做 让我向您展示我是如何编码的,我在frmViewformList savechanges按钮中所做的代码是: private void btnSaveChanges_Click(object sender, EventArgs e) { string sql; string User
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的新开发人员,这就是为什么我有点困惑。你会想从你的输入中去掉所有的“,”和`字符,这样人们就不能注入SQL了。当你这样做时,
设置Name=“+
”,您将需要实际包装您在引号中包含的任何内容,因为它是一个字符串:SET Name='“+UserName”“+…
这可能最好使用
string.Format(“更新用户登录集名称='{0}',其中名称='{1}',用户名,FormerUserName);
然后,您将使用System.Data.SqlClient;执行查询,然后使用SqlConnection建立与服务器的连接,并执行某种类型的
SqlCommand
;查看:您将希望从输入中删除所有“,”和`字符,以便人们无法注入SQL。当您执行SET Name=“+
”时,您需要实际地将包含在引号中的任何内容包装起来,因为它是一个字符串:SET Name='“+UserName'”+…
这可能最好使用
string.Format(“更新用户登录集名称='{0}',其中名称='{1}',用户名,FormerUserName”)代码>
然后,您将使用System.Data.SqlClient通过执行查询
然后使用SqlConnection建立到服务器的连接,并执行某种SqlCommand
;请看:以下是使用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();
}
希望这就足够让您开始了。下面是一段代码片段,可以使用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();
}
希望这足以让您开始使用。您应该使用Sql参数,以避免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;
}
}
您应该使用Sql参数,以避免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;
}
}
为了避免SQL注入攻击,最好使用参数化SQL查询。为了避免SQL注入攻击,最好使用参数化SQL查询。