标签: oledbcommand

为什么Access中的LIKE查询不返回任何记录?

有什么理由吗?

SELECT * FROM MyTable WHERE [_Items] LIKE '*SPI*'
Run Code Online (Sandbox Code Playgroud)

没有返回任何记录OleDbAdapter.Fill(DataSet)OleDbCommand.ExecuteReader()

当我直接在MS Access中运行相同的SQL时,它返回预期的记录.另外,在相同的代码中,如果我将SQL更改为

 SELECT * FROM MyTable 
Run Code Online (Sandbox Code Playgroud)

返回所有记录.

sql ms-access oledbcommand

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

为什么"ExecuteNonQuery"中的"Non"?

我知道这不是一个有用的问题的地狱,但我不禁被它所困扰.

那么,
为什么所说的方法(在*Command类中)被称为
ExecuteNonQuery而不是ExecuteQuery

这些SQL语句不是我们在DBs,查询中抛出的吗?

.net sqlcommand oledbcommand dbcommand executenonquery

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

OleDbParameters和参数名称

我有一个SQL语句,我正在通过OleDb执行,语句是这样的:

INSERT INTO mytable (name, dept) VALUES (@name, @dept);
Run Code Online (Sandbox Code Playgroud)

我正在向OleDbCommand添加参数,如下所示:

OleDbCommand Command = new OleDbCommand();
Command.Connection = Connection;

OleDbParameter Parameter1 = new OleDbParameter();
Parameter1.OleDbType = OleDbType.VarChar;
Parameter1.ParamterName = "@name";
Parameter1.Value = "Bob";

OleDbParameter Parameter2 = new OleDbParameter();
Parameter2.OleDbType = OleDbType.VarChar;
Parameter2.ParamterName = "@dept";
Parameter2.Value = "ADept";

Command.Parameters.Add(Parameter1);
Command.Parameters.Add(Parameter2);
Run Code Online (Sandbox Code Playgroud)

我得到的问题是,如果我添加参数以反过来命令,那么列将填充错误的值(即名称在dept列中,反之亦然)

Command.Parameters.Add(Parameter2);
Command.Parameters.Add(Parameter1);
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果参数值只是按照添加命令的顺序插入到表中,参数名称的重点是什么?参数名称似乎多余?

.net c# oledb oledbparameter oledbcommand

10
推荐指数
2
解决办法
9967
查看次数

如何在.NET中使用SQL用户定义的函数?

我在DB中创建了一个标量函数

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[fn_GetUserId_Username]
    (
    @Username varchar(32)
    )
RETURNS int
AS
    BEGIN
    DECLARE @UserId int
    SELECT @UserId = UserId FROM [User] WHERE Username = @Username
    RETURN @UserId
    END
Run Code Online (Sandbox Code Playgroud)

现在我想在.NET C#或VB.NET代码中运行它.

我使用Entity Framework,我试图用功能映射映射它,但我没有成功.我不关心用简单的DbCommand来做,问题是我没有得到任何结果(该函数存在于Entities类中):

public int GetUserIdByUsername(string username)
{
    EntityConnection connection = (EntityConnection)Connection;            
    DbCommand com = connection.StoreConnection.CreateCommand();
    com.CommandText = "fn_GetUserId_Username";
    com.CommandType = CommandType.StoredProcedure;
    com.Parameters.Add(new SqlParameter("Username", username));
    if (com.Connection.State == ConnectionState.Closed) com.Connection.Open();
    try
    {
        var result = com.ExecuteScalar(); //always null
    }
    catch (Exception e)
    { …
Run Code Online (Sandbox Code Playgroud)

.net sql user-defined-functions oledbcommand

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

SSIS命令中的存储过程的SSIS返回值

我正在迁移必须使用已存在的存储过程插入的数据.存储过程具有参数和插入行的id的返回值(来自select语句).在SSIS中的OLE DB命令中,我可以调用存储过程传递列值作为参数,我通常使用存储过程的输出参数来处理"id"输出; 但是当程序使用select来返回id值时,我不确定如何使用返回值来处理这个问题.这是我之前使用过的一个例子,但是我需要从select中返回的值:

exec dbo.uspInsertContactAddress
@Address = ?,
@ContactID = ?,
@DeliveryMethodId = ?,
@ID = ? output,
@Version = ? output
Run Code Online (Sandbox Code Playgroud)

sql-server ssis stored-procedures oledbcommand

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

SSIS中的别名参数

我在SSIS中使用OLE DB命令,SQL命令如下所示:

UPDATE DBO.CLIENT
SET
    TimeZoneID = ?,
    DaylightSavingTime = ?,
    ModifiedBy = ?,
    MicrosPropertyID = ?,
    IsOffline = ?,
    GlobalReporting_MaskPatronNumberType = ?,
    GlobalReporting_PatronNumberReadableCharacters = ?,
    GlobalReporting_MaskPrimaryCardType = ?,
    GlobalReporting_PrimaryCardReadableCharacters = ?,
    BICAddedDateTime = ?,
    BICUpdatedDateTime = ?,
    IsDBInDailyBoardRate = ?
WHERE 
    ClientID = ?
Run Code Online (Sandbox Code Playgroud)

当我尝试进行列映射时,这些参数显示为PARAM_0,PARAM_1,PARAM_2,PARAM_3等.有没有办法让它们显示为列名?

sql sql-server alias ssis oledbcommand

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

使用OLEDB命令(SSIS)更新oracle中的行

我试图使用OLEDB命令更新oracle数据库中的某些行,
但每当我尝试指定Sql命令时,这就是我得到的

An OLEDB record is available. Source: "OraOLEDB" Hresult:0x80040E51 Description:
"Provider cannot derive parameter information and
 SetParameterInfo has not been called."
Run Code Online (Sandbox Code Playgroud)

我试过用

"用于OLE DB的本机OLE DB\Oracle提供程序"提供程序

我试着换到

"原生OLE DB\Microsoft OLE BD Provider for Oracle"提供程序

但我得到同样的错误,请帮忙,我正在使用ssis 2008

以下是设置:Connection Manager如下所示
在此输入图像描述

当我测试它时,它会成功

在此输入图像描述



现在,当我来配置OLEDBCommand.时,我传入了Connenction Manager
在此输入图像描述

指定命令
在此输入图像描述

现在,当我移动配置参数时,没有显示任何内容,我收到此错误
在此输入图像描述

谢谢您的帮助

oracle oledbcommand

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

插入访问数据库

我无法将数据从文本框插入ms访问数据库,我收到错误" Syntax error in INSERT INTO."

有人可以帮帮我吗?这是代码:

public void button1_Click(object sender, EventArgs e)//save
{ 
using (OleDbConnection conn = new   
OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data 
Source=|DataDirectory|\productdb.mdb"))
{
OleDbCommand CmdSql = new OleDbCommand("Insert into [product](Kod, names, 
price,type,volume,manufacturer,importer)
enter code here
{
conn.Open();
CmdSql.Parameters.AddWithValue("@Kod", textBox1.Text);
CmdSql.Parameters.AddWithValue("@names", textBox2.Text);
CmdSql.Parameters.AddWithValue("@price", textBox3.Text);
CmdSql.Parameters.AddWithValue("@type", textBox4.Text);
CmdSql.Parameters.AddWithValue("@volume", textBox5.Text);
CmdSql.Parameters.AddWithValue("@manufacturer", textBox6.Text);
CmdSql.Parameters.AddWithValue("@importer", textBox7.Text);
CmdSql.ExecuteNonQuery();// i get the error here<<<
conn.Close();
}
}
Run Code Online (Sandbox Code Playgroud)

c# sql oledbcommand

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

数据库Command对象的参数顺序真的很重要吗?

我正在调试一个数据库操作代码,我发现虽然代码永远不会失败,但从未发生过正确的UPDATE.这是代码:

        condb.Open();
        OleDbCommand dbcom = new OleDbCommand("UPDATE Word SET word=?,sentence=?,mp3=? WHERE id=? AND exercise_id=?", condb);
        dbcom.Parameters.AddWithValue("id", wd.ID);
        dbcom.Parameters.AddWithValue("exercise_id", wd.ExID);
        dbcom.Parameters.AddWithValue("word", wd.Name);
        dbcom.Parameters.AddWithValue("sentence", wd.Sentence);
        dbcom.Parameters.AddWithValue("mp3", wd.Mp3);
Run Code Online (Sandbox Code Playgroud)

但经过一些调整后,这个工作:

        condb.Open();
        OleDbCommand dbcom = new OleDbCommand("UPDATE Word SET word=?,sentence=?,mp3=? WHERE id=? AND exercise_id=?", condb);
        dbcom.Parameters.AddWithValue("word", wd.Name);
        dbcom.Parameters.AddWithValue("sentence", wd.Sentence);
        dbcom.Parameters.AddWithValue("mp3", wd.Mp3);                         
        dbcom.Parameters.AddWithValue("id", wd.ID);
        dbcom.Parameters.AddWithValue("exercise_id", wd.ExID);
Run Code Online (Sandbox Code Playgroud)
  1. 为什么在OleDb连接的情况下必须在WHERE子句中给出最后一个参数是如此重要?之前使用过MySQL,我可以(并且通常会)首先编写WHERE子句的参数,因为这对我来说更合乎逻辑.

  2. 一般查询数据库时参数顺序是否重要?一些性能问题还是什么?

  3. 是否有其他数据库(如DB2,Sqlite等)需要维护的特定顺序?

更新:我删除?并包括有和没有的专有名称@.订单非常重要.在这两种情况下,只有在最后提到WHERE子句参数时才会发生实际更新.更糟糕的是,在复杂的查询中,很难知道自己哪个订单是Access期望的,并且在订单被更改的所有情况下,查询都没有完成预期的任务而没有警告/错误!

c# database ms-access oledbcommand dbcommand

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

使用Oledb导出到没有标题c#的excel文件中

我正在使用OleDB,我想将我的对象导出到excel表中.工作表中的每一行都是我的一个对象.问题是,当工作表中没有列标题时,我不知道如何插入数据.

这个:

commandString = "Insert into [Sheet1$] values('test1', 'test2')"
Run Code Online (Sandbox Code Playgroud)

抛出此异常:

Number of query values and destination fields are not the same.
Run Code Online (Sandbox Code Playgroud)

我的连接字符串是:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+filename+";Extended Properties='Excel 8.0;HDR=No'"
Run Code Online (Sandbox Code Playgroud)

c# oledb oledbconnection oledbcommand

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