C# SQL连接命令不会更改数据
在执行这些指令后,如何知道数据库中的表是否受到影响?我试图在控制台中显示查询结果,但它没有显示任何内容C# SQL连接命令不会更改数据,c#,visual-studio-2012,sqlconnection,C#,Visual Studio 2012,Sqlconnection,在执行这些指令后,如何知道数据库中的表是否受到影响?我试图在控制台中显示查询结果,但它没有显示任何内容 static void Main(string[] args) { DateTime date = new DateTime(2013, 3, 4); try { SqlConnection connection = new SqlConnection("Data Source=ExchangeRatesByDate/TestApplication/
static void Main(string[] args)
{
DateTime date = new DateTime(2013, 3, 4);
try
{
SqlConnection connection = new SqlConnection("Data Source=ExchangeRatesByDate/TestApplication/Rates_DB.sdf");
Console.WriteLine("Connection is created");
connection.Open();
Console.WriteLine("Connection is opened");
SqlCommand insertCommand = connection.CreateCommand();
insertCommand.CommandText = "INSERT INTO Rates_Table(ISO, Amount, Rate, Date) VALUES (USD, 1, 417.5, date)";
insertCommand.ExecuteNonQuery();
SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Rates_Table", connection);
DataTable data = new DataTable();
adapter.Fill(data);
Console.WriteLine(adapter);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
ExecuteOnQuery返回受影响记录数的整数
int _affected = insertCommand.ExecuteNonQuery();
后续问题
在上面的语句中,值USD和date是真实值,因为如果是,它肯定会抛出异常。它应该用单引号括起来,如下所示:
INSERT INTO Rates_Table(ISO, Amount, Rate, Date) VALUES ('USD', 1, 417.5, '')
因为它们是字符串文字。但在insert语句中插入具有实际值的数据不是正确的方法。这些值应该参数化,以避免sql注入
为了正确编码
使用using语句处理propr对象
使用try catch块正确处理对象
ExecuteOnQuery返回一个显示受影响行数的整数
您可以使用ExecuteOnQuery对执行目录操作
例如,查询数据库结构或创建数据库
对象(如表)或更改数据库中的数据,而无需
通过执行UPDATE、INSERT或DELETE语句来使用数据集。
尽管ExecuteOnQuery不返回任何行、任何输出参数或
映射到参数的返回值用数据填充
对于UPDATE、INSERT和DELETE语句,返回值为
受命令影响的行数。当触发器存在于
在插入或更新表时,返回值包括数字
受插入或更新操作和编号影响的行数
受一个或多个触发器影响的行数。对于所有其他类型的
语句,返回值为-1。如果发生回滚,则返回
值也为-1
像这样试试
int updatedRows = insertCommand.ExecuteNonQuery();
if(updatedRows>0)
{
//do something
}
我认为您正在向datatable显示SqlDataAdapter对象show,并为插入字符串使用参数,如“USD”控制台实际上写了什么?错误,什么都没有。。。?另外,insertCommand是错误的-必须使用参数替换,而不是将datevariable放在文本字符串中。Ok。非常感谢。但是当我试图阅读时,控制台没有显示结果。我的连接字符串的格式是否正确?我的表的文件名是Rates\u table.sql,它位于Rates\u DB fileData Source=myServerAddress中;初始目录=myDataBase;综合安全=SSPI;用户ID=我的用户名;密码=我的密码;
string sqlStatement = "INSERT INTO Rates_Table(ISO, Amount, Rate, Date) VALUES (@iso, @Amount, @rate, @date)";
using (SqlConnection conn = new SqlConnection(connStr))
{
using(SqlCommand comm = new SqlCommand())
{
comm.Connection = conn;
comm.CommandText = sqlStatement;
comm.CommandType = CommandType.Text;
comm.Parameters.AddWithValue("@iso", '-- value --');
comm.Parameters.AddWithValue("@Amount", '-- value --');
comm.Parameters.AddWithValue("@rate", '-- value --');
comm.Parameters.AddWithValue("@date", '-- value --');
try
{
conn.Open();
int _affected = comm.ExecuteNonQuery();
}
catch(SqlException e)
{
// do something with the exception
// do not hide it
// e.Message.ToString()
}
}
}
int updatedRows = insertCommand.ExecuteNonQuery();
if(updatedRows>0)
{
//do something
}