The*_*ask 0 .net c# sql sql-server-2005
我试图将一些数据插入我的数据库(sql server/local文件),但它不起作用.
public bool SaveCookie(string cookie, string expires)
{
SimpleDBM db = new SimpleDBM();
db.Connect();
try
{
string query = string.Format("INSERT INTO Cookies(cookie_value, cookie_expires) VALUES('{0}', '{1}');", cookie, expires);
SqlCommand cmd = new SqlCommand();
cmd.CommandText = query;
//...
SqlDataReader data = db.Query(ref cmd);
return data.Read();
}
catch
{
return false;
}
finally
{
db.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
本SimpleDBM类:
public class SimpleDBM {
public static string dbpath = @"...";
public static string dbname = "db.mdf";
public static string dfullPath = Path.Combine(dbpath, dbname);
public static string connStr = string.Format(@"Data Source=.\SQLEXPRESS;AttachDbFilename={0};Integrated Security=True;Connect Timeout=30;User Instance=True", dfullPath);
private SqlConnection con;
public void Connect()
{
con = new SqlConnection();
con.ConnectionString = connStr;
con.Open();
}
public SqlDataReader Query(ref SqlCommand cmd)
{
cmd.Connection = con;
return cmd.ExecuteReader();
}
public void Close()
{
con.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以指出我的错误吗?对于其他查询,它似乎工作正常.
提前致谢.
这个问题似乎是,你要执行一个查询,不返回使用结果集的ExecuteReader该方法的SqlCommand类将尝试执行您的查询,创建并返回一个DataReader为最终结果集.
您应该使用ExecuteNonQuery for INSERT和UPDATEsql语句.
边注
这不是你得到错误的原因,但是你也应该考虑使用SqlParamters而不是将值组合到INSERT语句中.使用准备好的SQL语句通常可以提高性能,还有助于防止SQL注入攻击.
有关使用预准备语句的示例,请参阅MSDN页面或Prepare方法.