如何在这些说明后知道数据库中的表是否受到影响?我尝试在控制台中显示查询结果,但它没有显示任何内容。
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());
}
}
答案 0 :(得分:0)
ExecuteNonQuery()
返回受影响记录数的整数。
int _affected = insertCommand.ExecuteNonQuery();
后续问题
INSERT INTO Rates_Table(ISO, Amount, Rate, Date) VALUES (USD, 1, 417.5, date)
在上面的语句中,值USD
和date
是实数值,因为如果是这样,它肯定会抛出异常。它应该用这样的单引号换行:
INSERT INTO Rates_Table(ISO, Amount, Rate, Date) VALUES ('USD', 1, 417.5, '')
因为它们是字符串文字。但这不是在INSERT
语句中插入具有实际值的数据的正确方法。应对参数化值进行参数化以避免sql injection
。
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()
}
}
}
正确编码
using
语句进行propr对象处理try-catch
块来正确处理对象答案 1 :(得分:0)
ExecuteNonQuery()
返回一个显示受影响行数的整数。 ExecuteNonQuery
您可以使用ExecuteNonQuery执行目录操作(for 例如,查询数据库的结构或创建数据库 诸如表之类的对象,或者在没有的情况下更改数据库中的数据 通过执行UPDATE,INSERT或DELETE语句来使用DataSet。 虽然ExecuteNonQuery不返回任何行,但任何输出参数或 映射到参数的返回值将填充数据。
对于UPDATE,INSERT和DELETE语句,返回值为 受命令影响的行数。当a上存在触发器时 正在插入或更新的表,返回值包括数字 受插入或更新操作影响的行数和数字 受触发器或触发器影响的行数。对于所有其他类型的 语句,返回值为-1。如果发生回滚,则返回 值也是-1。
试试这个
int updatedRows = insertCommand.ExecuteNonQuery();
if(updatedRows>0)
{
//do something
}
答案 2 :(得分:0)
我认为你正在向数据表显示SqlDataAdapter对象show,并且还使用像'USD'这样的插入字符串的参数