我正在尝试使用SQL请求。因此,我想使用界面IDbCommand
我尝试使用参数添加请求的值,但如果我使用我的脚本,查询看起来像
SELECT * FROM DB WHERE Data = @val
然后我得到SqlException
。
有人可以帮助我吗?
// "Using": - To make sure that the connection get closed correctly!
using (IDbConnection con = new SqlConnection(connectionstring))
{
try
{
/*
* Use this for Initialize that it is a SQL Server,
* IDbConnection is for every connection
*/
IDbCommand sql = con.CreateCommand();
var exprParam = sql.CreateParameter();
sql.CommandText = comand;
exprParam.Value = value;
exprParam.ParameterName = "@val";
sql.Parameters.Add(exprParam);
con.Open();
// Connect to DB. Timeout: 15 Sekunden
IDataReader rdr = sql.ExecuteReader();
// Build DataReader
while (rdr.Read())
// Read data from console
numberOfRows = Convert.ToInt32(rdr[0]);
}
catch(Exception ex)
{
}
}
答案 0 :(得分:1)
使用以下代码修改代码:
try
{
string value = "text value from your control";
int numberOfRows = 0;
//For Sql Server Authentication
string connectionString =
@"server=yourservername;InitialCatalog=yourdatabasename;
User Id=sa;Password=yoursqlserverpassword";
//For Windows Authentication
string connectionString =
@"server=yourservername;InitialCatalog=yourdatabasename;
Integrated Security=SSPI";
using(SqlConnection cn = new SqlConnection(connectionString))
{
cn.Open();
string query = "SELECT * FROM DB WHERE Data=@val";
SqlCommand cmd = new SqlCommand(query, cn);
cmd.Parameters.Add(new SqlParameter("@val", value));
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
numberOfRows += Convert.ToInt32(dr[0].ToString());
}
}
}
catch(Exception ex)
{
//Handle your Error - or show it if required
}
答案 1 :(得分:0)
.NET Framework的数据访问接口不是为您直接使用而设计的。相反,它们是为了在构建新的数据提供者时提高一致性(数据提供者的示例是System.Data.SqlClient
,System.Data.OleDb
等等)。这意味着编写代码以访问(例如)Oracle数据库与使用SQL Server数据的代码类似。由于这些接口,在切换数据提供程序时需要更改的代码量已经很小,但在直接使用提供程序时,它永远不会是100%通用的。
如果您的客户希望将来能够灵活地更改数据访问策略,那么值得您做一些将应用程序拆分为不同层的研究,特别是将数据访问逻辑与您使用的客户端代码分开那个数据。您可能还想考虑使用ORM,例如Entity Framework。
要回答有关SQL查询的更紧迫的问题,可以使用以下代码:
using (var con = new SqlConnection(connectionstring))
{
con.Open();
using (var cmd = new SqlCommand("<YOUR QUERY TEXT>", con))
{
cmd.Parameters.AddWithValue("@val", yourValue);
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
...
}
}
}
}