标签: oledbcommand

执行OleDbCommand时出错.."必须声明标量变量"@MaxID"."

private void AddValue(string strValue)

{

      //get the maximum id for Lists first

      int MaxID = DataOperations.ReturnMaxIDInATable("Lists", connString);
      int iSqlStatus = 0;
      string query = "INSERT INTO Lists(ID, ListName, ListValue) 
         VALUES(@MaxID, @ListName, @ListValue)";

      MaxID++;

      OleDbConnection dbConn = new OleDbConnection(connString);
      OleDbCommand dbComm = new OleDbCommand();

      dbComm.Parameters.Clear();
      try
      {
                dbComm.CommandText = query;
                dbComm.CommandType = CommandType.Text;

                OleDbParameter IDParam = new OleDbParameter();
                IDParam.ParameterName = "@MaxID";
                IDParam.OleDbType = OleDbType.BigInt;
                IDParam.Value = MaxID;
                dbComm.Parameters.Add(IDParam);

                dbComm.Parameters.AddWithValue("@ListName", ListName);
                dbComm.Parameters.AddWithValue("@ListValue", strValue);
                dbComm.Connection = dbConn;
                DataAccess.HandleConnection(dbConn);

                iSqlStatus = Convert.ToInt16(dbComm.ExecuteNonQuery());

                //Now check …
Run Code Online (Sandbox Code Playgroud)

c# oledbcommand

3
推荐指数
1
解决办法
5318
查看次数

将图像存储到 Access 数据库的附件字段中

我正在编写一个 VB 应用程序,需要在数据库中存储图像。用户在计算机上选择图像,这会以字符串形式提供路径。这是我的尝试,但是我收到错误“INSERT INTO 查询不能包含多值字段”。

这是我的代码:

Dim buff As Byte() = Nothing
Public Function ReadByteArrayFromFile(ByVal fileName As String) As Byte()
    Dim fs As New FileStream(fileName, FileMode.Open, FileAccess.Read)
    Dim br As New BinaryReader(fs)
    Dim numBytes As Long = New FileInfo(fileName).Length
    buff = br.ReadBytes(CInt(numBytes))
    Return buff
End Function

Sub ....
    Dim connImg As New OleDbConnection
    Dim sConnString As String
    Dim cmdImg As New OleDbCommand

    sConnString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & My.Settings.DB & ";Persist Security Info=False;"
    connImg = New OleDbConnection(sConnString)
    connImg.Open()
    cmdImg.Connection = connImg …
Run Code Online (Sandbox Code Playgroud)

database vb.net attachment oledbcommand ms-access-2013

3
推荐指数
1
解决办法
1万
查看次数

表达式中未定义的函数'Replace',替换替代?

正如在这个问题中所读到的:表达式中未定义的函数'Replace' ,我收到错误"表达式中未定义的函数'替换',因为"你根本没有使用Access查询引擎",但是我用什么作为替代 ?显然"Iif,Instr的组合"会起作用,但我找不到用这些方法实际替换某些东西的方法.

我想要的只是从值中删除空格,我该怎么做?

const string strSql = "SELECT TOP 15 HOOFDGROEP.HOOFDGROEP, SUBGROEP.SUBGROEP, Artikels.*" +
                                  " FROM (Artikels LEFT JOIN HOOFDGROEP ON Artikels.HOOFDGROEPID = HOOFDGROEP.ID)" +
                                  " LEFT JOIN SUBGROEP ON Artikels.SUBGROEPID = SUBGROEP.ID WHERE REPLACE(ArtikelNaam, ' ', '') LIKE  '%' + @ArtikelNaam + '%'";

            var objCommand = new OleDbCommand(strSql, _objConnection);
            objCommand.Parameters.Add("@ArtikelNaam", OleDbType.Char).Value = naamZoeker.Replace(" ", "");
Run Code Online (Sandbox Code Playgroud)

c# sql ms-access oledbcommand

3
推荐指数
1
解决办法
7086
查看次数

SSIS - 使用 OLE DB 命令更新表

我需要在 SSIS 中翻译下一个 SQL 查询:(每个表属于不同的源 - SQL Server & ORACLE)

update A
set
A.col1 = B.col1
A.col2 = B.col1
from
table A inner join table B B on A.col3 = Col3
where
A.col4 = value 1 and
A.col5 = value2 and
B.col4 = value 3;
Run Code Online (Sandbox Code Playgroud)

如您所见,源和目标对应于相同的源:表 A。这是我创建的工作流。

在此处输入图片说明

在条件拆分之后,我使用了一个派生列来复制列 B.Col1 以在 OLE DB 命令上使用它来更新表 A 的列之后,我在 OLE DB 命令中编写了下一段查询任务:

update Table A
set
col1 = ?
col2 = ?
Run Code Online (Sandbox Code Playgroud)

但此时我有一个问题,我是只更新我从条件拆分中获得的子集的值,还是更新所有表 A。此外,更新查询的最后部分引用了表 B 和 in OLE DB 命令任务我只能参考一个数据源。

澄清: 代码只是一个模式,所以我不需要更正它,这不是我的疑问(以防我犯了错误)。

我被要求在不修改 sql …

ssis oledbcommand sql-update

3
推荐指数
1
解决办法
1万
查看次数

将 Access 报告导出为 PDF

我正在用 C# 编写一个连接到 Access 数据库的 ASP.NET 应用程序,现在我希望它将报告导出为 PDF。这是我的代码,仅连接到 Access,我正在考虑运行访问宏或使用 Microsoft.Office.Interop.Access.Application DoCmd.OutputTo 运行命令,但我不知道如何准确使用它。有什么帮助吗?

string user = "myUser";
string pass = "myPass";
string host = "myHost";
OleDbConnection connection = new OleDbConnection(@"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = myPath");
string _command = ...; //I don't know what put here

try
{
    OleDbCommand command = new OleDbCommand(_command, connection);
    command.CommandText = ...; //I don't know what put here
    int temp = command.ExecuteNonQuery();
    Console.WriteLine("PDF created!");
 }
Run Code Online (Sandbox Code Playgroud)

c# pdf asp.net ms-access oledbcommand

3
推荐指数
1
解决办法
2265
查看次数

Excel文件中的古怪SELECT通过OleDbDataAdapter方法(C#)

我有一个这种形式的Excel文件:

Column 1    Column 2    Column 3  
 data1        data2    
 data1        data2  
 data1        data2  
 data1        data2  
 data1        data2       data3  
Run Code Online (Sandbox Code Playgroud)

也就是说,除了最后一行之外,整个第3列都是空的.我通过OleDbDataAdapter访问Excel文件,返回一个DataTable:这是代码.

query = "SELECT * FROM [" + query + "]";
objDT = new DataTable();
objCmdSQL = this.GetCommand();
objCmdSQL.CommandText = query;
objSQLDad = new OleDbDataAdapter(objCmdSQL);
objSQLDad.Fill(objDT);
return objDT;
Run Code Online (Sandbox Code Playgroud)

关键是,在这种情况下,我的代码返回一个只有第1列和第2列的DataTable.
我的猜测是JET引擎试图通过每列中第一个单元格的类型来推断列类型; 作为第一个值null,整个列被忽略.
我试图填写零,这段代码实际上是返回所有三列; 这显然是最不可取的解决方案,因为我必须处理大量的小文件.
反转选择范围(从"A1:C5"到"C5:A1")也不起作用.我正在寻找更优雅的东西.
我已经发现了一些讨论类型不匹配的帖子(int列中的varchar单元格,反之亦然),但实际上还没有发现与此相关的任何内容.
谢谢阅读!

编辑

奇怪的行为再次.我必须处理大多数Excel 2003 .xls文件,但由于这个问题已得到解答,我认为我可以针对Excel 2007 .xslx文件测试我的代码.连接字符串如下:

string strConn = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + _fileName.Trim() + @";Extended Properties=""Excel 12.0;HDR=No;IMEX=1;""";
Run Code Online (Sandbox Code Playgroud)

我得到"外部表不是预期的格式"异常,当ACE/JET和正在打开的文件之间存在版本不匹配时,我认为这是标准异常.

字符串

Provider=Microsoft.ACE.OLEDB.12.0 
Run Code Online (Sandbox Code Playgroud)

意味着我正在使用最新版本的OLEDB,我快速浏览了一下,这个版本用于需要连接到.xlsx文件的任何地方.
我尝试过只有一个香草提供商(只有Excel 12.0,没有IMEX和HDR),但我得到了同样的例外.
我在.NET 2.0.50727 …

c# excel null oledbcommand oledbdataadapter

2
推荐指数
1
解决办法
1万
查看次数

如何正确使用参数化查询?

我现在已经连续工作了2个小时并阅读了很多这样的问题,但是我无法看到我的OleDbCommand在哪里或者为什么没有按照应有的方式工作.
我把这段代码写成了我见过的所有问题和答案的合并:

using (var connection = new OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;" + @"data source= *path to mdp*"))
{
  try
  {
    connection.Open();
    foreach (KeyValuePair<string, string> pair in dictionary)
    {
        string query = "SELECT * FROM mytable WHERE db_id=?";
        var command = new OleDbCommand(query, connection);
        //command.Parameters.Add(new OleDbParameter("@ID", pair.Value));
        command.Parameters.Add("?", OleDbType.BSTR).Value = pair.Value;
        var reader = command.ExecuteReader();
        while (reader.Read())
        {
            Console.WriteLine(reader[0].ToString());
        }
        reader.Close();
    }
    connection.Close();
  }
  catch (Exception ex)
  {
    MessageBox.Show(ex.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
  }
}
Run Code Online (Sandbox Code Playgroud)

然而,这给了我"给出一个或多个必需的Parameteres没有值"错误.如果我尝试现在评论的行

command.Parameters.Add(new OleDbParameter("@ID", pair.Value));
Run Code Online (Sandbox Code Playgroud)

并评论另一方,结果完全相同.
但是,如果我同时使用这两行,那么阅读器会读取我的表格列中的每个条目,而不仅仅是与pair.Value的所需匹配.

KeyValuePair只是一个字符串id的元组,它来自我的程序作为一个键,它在数据库中的相应id作为值.

我很感谢任何帮助或建议.

c# oledbcommand

2
推荐指数
1
解决办法
110
查看次数

C#OleDBCommand SQL语法错误

我通过C#OleDbCommand将插入查询运行到Access后端表时遇到问题.如果您复制它并直接在Access中运行它,SQL运行正常,并且在点击此特定条目之前它适用于其他数据.

我试过改变数据,没有成功.这个源是一个XML文件.正确加载XML数据.

失败的命令是dbCommand.ExecuteNonQuery(),错误"INSERT INTO语句中的语法错误".

dbCommand = new OleDbCommand(string.Format(INSERT_RECURRING, tableName, fieldList, valueList), dbCon);
dbCommand.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

尝试运行和失败的SQL如下所示.请注意,表和字段名称是从XML源文件生成的,因此是大写和下划线.

INSERT INTO LIST_CONTACTSGP (RID, CONTACT_TYPE, SURNAME_OR_FAMILY_NAME, GIVEN_NAMES, ORGANISATION, ADDRESS_GP, PHONE, MOBILE, WORK, FAX, EMAIL, COMMENTS) VALUES ('1-8HZAZN', 'Daughter, Other Emergency Contact', 'Smith', 'Ms Jenny', '', '', '49123456', '0416123456', '', '', '', '');
Run Code Online (Sandbox Code Playgroud)

正如我之前提到的,这个SQL在Access中运行时没有失败,并且其他插入命令在此失败之前工作正常(在其他表上).我删除了可能导致问题的所有SQL特殊字符.

任何帮助将不胜感激.

根据要求,堆栈跟踪的副本:

System.Data.OleDb.OleDbException was unhandled
  Message=Syntax error in INSERT INTO statement.
  Source=Microsoft Office Access Database Engine
  ErrorCode=-2147217900
  StackTrace:
       at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
       at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
       at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
       at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& …
Run Code Online (Sandbox Code Playgroud)

c# sql ms-access-2007 oledbcommand

1
推荐指数
1
解决办法
2728
查看次数

无法将类型'string'隐式转换为'System.Data.CommandType'

我正在看一个网络教程,讲师用我不懂的语言讲话,视频没有显示完整的长度.任何人都可以告诉我这条线应该是什么样的......

 private void Insertbtn_Click(object sender, EventArgs e)
 {
   OleDbCommand cmd = new OleDbCommand(); // this is good
   cmd.CommandType = CommandType.Text;    // this is good
   cmd.CommandType = "INSERT INTO Students(StudentID, StudentName, StudentCNCI, 
   StudentDOB) Values('" + StudIDTxt.Text + "','" + StudNameTxt.Text + "','" + 
   StudCNCITxt.Text + "','" + StudDOBTxt.Text +")"; *// Need help here pls*
   cmd.Connection=myCon;   
   myCon.Open();
   cmd.ExecuteNonQuery();
   myCon.Close();
 }
Run Code Online (Sandbox Code Playgroud)

我正在开发VS 2010 C#.使用Access.

c# ms-access oledbcommand

1
推荐指数
1
解决办法
2993
查看次数

在 OleDbCommand 中使用“... where Column like ...”不起作用

我正在使用 C# 从 Access(我认为是 2003 或 2007)数据库中选择某些内容,但它没有选择任何内容。我在 Access 本身中尝试了 SQL 语法,它似乎工作正常。我对 C# 和 Access 相当陌生。

到目前为止我所拥有的:

OleDbCommand command = new OleDbCommand("Select * from Lid Where Naam Like @naam order by RangID desc, Creatiedatum, Naam", connection);
command.Parameters.Add(new OleDbParameter("@naam", "*" + naam + "*"));
Run Code Online (Sandbox Code Playgroud)

我尝试了一些变体,使用 % 而不是 *,将其放在第一行而不是参数处等等。但到目前为止似乎没有任何效果。我没有找到解决方案谷歌搜索,也许我只是不知道要谷歌什么,就像我之前所说的那样,我对 C# 和 Access 还很陌生。

c# sql ms-access oledbcommand visual-studio

1
推荐指数
1
解决办法
398
查看次数