大家好,我想执行我的SQL语句,但是我在synatx上遇到麻烦,有人可以帮助我了解我做错了什么吗?
谢谢,阿什。
public void AddToDatabase(string[] WordArray, int Good, int Bad, int Remove)
{
for (int WordCount = 0; WordCount < WordArray.Length; WordCount++)
{
string sSQL = "INSERT INTO WordDef (Word, Good, Bad, Remove) VALUES (" + WordArray[WordCount] + ", " + Good + ", " + Bad + ", " + Remove + ")";
Debug.Print(sSQL);
//Private m_recordset As ADODB.Recordset
//Private m_connection As ADODB.Connection
ADODB.Recordset RS;
ADODB.Connection CN ;
CN = new ADODB.Connection();
RS = new ADODB.Recordset();
CN.CursorLocation = ADODB.CursorLocationEnum.adUseClient;
CN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=doom_calc_dict.mdb;jet OLEDB:database";
CN.Open(CN.ConnectionString,"","",0);
object dummy = Type.Missing;
CN.Execute(sSQL,out dummy,0);
RS.Close();
CN.Close();
//string sSQL = "SELECT Word FROM WordDef WHERE Word='" + WordArray[WordCount] + "'";
DatabaseTools.LoadDataFromDatabase(sSQL);
//DatabaseTools.LoadDataFromDatabase(sSQL);
}
}
您需要解决的最重要的事情是使用查询参数,而不是动态地构建字符串。这将提高性能,维护和安全性。
此外,您想使用较新的强类型ADO.Net对象。确保为添加使用指令System.Data.OleDb
。
注意using
此代码中的语句。完成连接后,他们将 确保 您的连接已关闭。这很重要,因为数据库连接是有限且不受管理的资源。
最后,您实际上并没有在代码中使用数组。您真正关心的只是迭代单词集合的能力,因此您想接受一个IEnumerable<string>
而不是一个数组。不用担心:如果您需要传递数组,则此函数将接受数组作为参数。
public void AddToDatabase(IEnumerable<string> Words, int Good, int Bad, int Remove)
{
string sql = "INSERT INTO WordDef (Word, Good, Bad, Remove) VALUES (@Word, @Good, @Bad, @Remove)";
using (OleDbConnection cn = new OleDbConnection("connection string here") )
using (OleDbCommand cmd = new OleDbCommand(sql, cn))
{
cmd.Parameters.Add("@Word", OleDbType.VarChar);
cmd.Parameters.Add("@Good", OleDbType.Integer).Value = Good;
cmd.Parameters.Add("@Bad", OleDbType.Integer).Value = Bad;
cmd.Parameters.Add("@Remove", OleDbType.Integer.Value = Remove;
cn.Open();
foreach (string word in Words)
{
cmd.Parameters[0].Value = word;
cmd.ExecuteNonQuery();
}
}
}
还有一件事:在OleDb中使用查询参数时,确保按顺序添加它们很重要。
更新: 修复了在VS 2005 / .Net 2.0上的工作(已依赖于VS 2008的功能)。
我想知道是否可以在一个准备好的语句中执行多个SQL查询。这是我要执行的第一个查询:
问题内容: 我想在 Java中 执行查询。 我创建一个连接。然后,我想执行一条语句,完成后关闭连接,但是我想通过连接执行一些插入语句,并在循环完成后关闭连接。 我能做些什么 ? 我的示例代码是: 当执行select语句()时,循环必须为两次,但是当()执行并完成时,则关闭连接并从类中返回。 问题答案: 以下示例使用&命令同时执行多个SQL命令。 结果: 以上代码示例将产生以下结果。结果可能会有所不
问题内容: 我正在尝试使用HQL(hibernate查询语言)在两个表之间创建一个并集。此SQL脚本可在我的SQL服务器上正常运行: 问题是,当我尝试像这样在grails中运行它时: 我收到此错误: 如何在grails中运行上述SQL语句? 谢谢杰森 问题答案: HQL不支持联合。自2005年以来,Hibernate的JIRA中存在一个问题。
下面给出一个例子来演示一下如何使用JDBC来执行各种SQL语句,其中包括DDL语句(建立数据库和数据表)、INSERT语句和SELECT语句。 1.程序分析说明 本程序首先创建一个mydb数据库(如果存在就不创建),然后创建一个用于保存图书信息的表t_books(如果存在,删除后再创建),最后向表中插入两条记录,并查询和显示其中的第2条记录。 2.代码编写 本程序使用了Statement接口的ex
这是我的实体类 org.springframework.dao.DataIntegrityViolationException:不能执行语句;SQL[N/A];约束[created_at];嵌套异常是org.hibernate.exception.constraintViolationException:在org.springframework.orm.jpa.vendor.hibernatejp
问题内容: 是否可以使用T-SQL执行存储在表中的SQL语句? 表中存储的语句是临时语句,可以是 SELECT TOP 100 * FROM ATable 到更复杂的语句: 我想执行从T-SQL声明的 @Query 变量。这可能吗?(我正在运行MSSQL 2005环境) 问题答案: 您可以使用 运行您的T-SQL 这是SQL Server 2005的MS docn的链接 http://msdn.m