ODBC Connection With Stored Procedure On ISeries As Data Source
Mar 6, 2006
I have created a stored procedure on the iSeries that creates a cursor and opens it. I am trying to write my report to use the stored procedure. I cannot get the data source to work. How do I create my data source so that it uses the stored procedure? My SP has three parameters I am trying to pass from the report. The parms are created in the layout.
I have set up a new connection as a connection from data source, but I cannot see how to use this connection to create my Data Flow Source. I have tried using an OLE DB connection, but this is painfully slow! The process of loading 10,000 rows takes 14 - 15 minutes. The same process in Access using SQL on a linked table via DSN takes 45 seconds.
Have I missed something in my set up of the OLE DB source / connection? Will a DSN source be faster?
I hope this is a fairly simple problem that I'm just missing. I've installed SQL Server 2005 Developer Edition on Windows XP Professional. I'm trying to create an ODBC data source under an ID I created ("InstallOwner") that is part of the administrators group. In the Wizard, I give it a name and default to the "local" server. I selected to authenticate the ID using SQL Server authentication. However when I enter the ID and Password, I get the following error. "Connection Failed - SQL State=28000, SQL Server Error: 18456, [microsoft][SQL Native Client][SQL Server] Login Failed for user "InstallOwner". If I use the "sa" account, it works fine. Can someone point me in the right direction?
Hi,I have a loopback connection using ODBC in the DLL initialization codeofthe SQL Server ESP Module (SQL Server 2000). The loopback connectionworksfine when the DSN is specifed with the "NT Authentication", however thesamefails when specified with the "SQL Server user authentication". I havetriedusing both the SQLConnect and SQLDriverConnect calls, butu none of themworks. Also the same code works fine on SQL Server 2005. Is this aknownproblem with some fix, or am I doing something wrong here??The code is as given below,// ESPODBCLoopback.cpp : Defines the entry point for the DLLapplication.//#include "stdafx.h"#include <sql.h>#include <sqlext.h>#include <srv.h>#define XP_NOERROR 0#define XP_ERROR 1#define SEND_ERROR(szMessage, pServerProc) { srv_sendmsg(pServerProc, SRV_MSG_ERROR, 20001, SRV_INFO, 1, NULL, 0, (DBUSMALLINT) __LINE__, szMessage, SRV_NULLTERM); srv_senddone(pServerProc, (SRV_DONE_ERROR | SRV_DONE_MORE), 0, 0); }// typedef const char* (_MakeODBCConnection)(void);static const char* _szMessage = "ODBC Working out....";void_MakeODBCConnection(void){char szConnOut[1024];SQLSMALLINT nOut = 0;const char* szDSNName = "TestOdbc";const char* szUsername = "test";const char* szPassword = "test";SQLHANDLE hEnvironment = NULL;SQLHANDLE hDBConnection = NULL;if (SQL_ERROR == SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&hEnvironment)) {_szMessage = "Failed to create the environment handle";return;}SQLSetEnvAttr(hEnvironment, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,SQL_IS_INTEGER);if (SQL_ERROR == SQLAllocHandle(SQL_HANDLE_DBC, hEnvironment,&hDBConnection)) {SQLFreeHandle(SQL_HANDLE_ENV, hEnvironment);_szMessage = "Failed to create the database connection";return;}/*----------------- This is where it fails -------------------*//* Tried both the with/Without database name */if (SQL_ERROR == SQLDriverConnect(hDBConnection, GetWindow(,(SQLCHAR*)"{DSN=TestOdbc;UID=test;PWD=test;DATABASE=test;}", SQL_NTS,(SQLCHAR*)szConnOut, sizeof(szConnOut), &nOut, SQL_DRIVER_COMPLETE)){SQLFreeHandle(SQL_HANDLE_DBC, hDBConnection);SQLFreeHandle(SQL_HANDLE_ENV, hEnvironment);_szMessage = "Failed to connect to the database";return;}/*if (SQL_ERROR == SQLConnect(hDBConnection, (SQLCHAR*)szDSNName,SQL_NTS,(SQLCHAR*)szUsername, SQL_NTS, (SQLCHAR*)szPassword, SQL_NTS)) {SQLFreeHandle(SQL_HANDLE_DBC, hDBConnection);SQLFreeHandle(SQL_HANDLE_ENV, hEnvironment);_szMessage = "Failed to connect to the database";return;}*/SQLFreeConnect(hDBConnection);SQLFreeHandle(SQL_HANDLE_DBC, hDBConnection);SQLFreeHandle(SQL_HANDLE_ENV, hEnvironment);_szMessage = "ODBC Connection cycle completed successfully";}BOOL APIENTRY DllMain( HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved){switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:_MakeODBCConnection();break;case DLL_THREAD_ATTACH:break;case DLL_THREAD_DETACH:break;case DLL_PROCESS_DETACH:break;}return TRUE;}static void_CheckODBCConnection(void){//_MakeODBCConnection pFunction = NULL;//_szMessage = pFunction();}extern "C" __declspec(dllexport)RETCODE xp_test_odbc(SRV_PROC *pServerProc){//_szMessage = _MakeODBCConnection();if (FAIL == srv_paramsetoutput(pServerProc, 1, (BYTE*)_szMessage,(ULONG)strlen(_szMessage),FALSE)) {return XP_ERROR;}return XP_NOERROR;}Thanks,Anil KumarArizcon Corporation ( http://www.arizcon.com )
I have developed an SSIS Package which uses an ODBC connection to an AS400 iseries stored procedure. I use an Execute SQL Task. The query is Call Doctrack.PubFeed(?,?,?,?). The procedure takes 2 input parameters and 2 output parameters (3rd and 4th parameters) The data types of the output parameters are an integer and varchar. As part of the procedure data is inserted into a table on the iseries.
When I run the package using breakpoints to view the values of the variables I see that the stored procedure returns values for the output parameters and the execute SQL task is a success and proceeds to the next task in the package. The whole package ends successfully.However, when the table on the iseries is checked nothing has been inserted into it. To test further, I manually run the procedure on the iseries using the same parameters. The run is successful. And when the table is checked, there are in fact new rows inserted.
What can possibly be the issue since I am not getting any errors when I run the package? Oh I should add that prior to the execute Sql Task, there is a data flow task which moves data from a SQL Server database to a table on the iseries (successfully) using the same ODBC connection. The execute sql tasks uses that information for the Stored procedure.
Is it possible to use a stored procedure in a Data Source View? When I use the wizard to create the Datasource View, all it lets me choose is tables and views in the database. Am I missing something, or trying to do something that is impossible?
I have created a DTS package in SQL 2000 that connects to AS/400 via IBM iSeries Client Access ODBC drivers version R52. I got an error everytime I tried to use the GETDATE() function as follow:
Error Source : Microsoft OLE DB Provider for ODBC Drivers Error Description : [IBM][iSeries ODBC Driver][DB@ UDB]SQL0204 - GETDATE in *LIBL Type *N not found
Hello, I'm not up to speed on the IBM database and provider technologies, and I have an issue that I'm not clear on. I am using the .Net ODBC Data Provider in a connection mananger. The DSN uses the iSeries Access ODBC Driver. I have iSeries Access for Windows version 5 release 4 installed on laptop where I have built the package.
I have a sql command configured in a DataReader source that uses the connection manager. Between the source and sql server table destination, I have a Derived Column transform that converts the columns from Unicode to non unicode data.
When I run the package, I get an error that states that the package failed because a particular column, 'ADDR1' is set to fail if truncation occurs. I set up error output to a text file so that I could look at the failing row(s). The text file had to be set up using UTF-8 before it would accept data. The ADDR1 column at the destination will accept 30 characters. The data in the ADDR1 column of the failing row is 19 characters long, but I think there is a carriage return character present. I have tried TRIM in the exression for the column, but no luck. I have tried code pages 65001, and 37 in the Derived Column transform, but that has not worked. I remembered to set up DefaultCodePage and AlwaysUseDefaultCodePage for the OLE DB destination for each code page change.
Am I not using the correct code page, or do I need to do something else to clean up the data?
This seems to be much more difficult than it was in DTS (or perhaps I just need to adjust to the new way of doing things).
Eventually I found that I needed to use "SQL command from variable" and using two other variables as input parameters. The expresion for the command is
This previews correctly and the resulting columns are available for mapping to a destination. So far so good.
By the way, is this the best way to call a stored procedure with parameters?
I have pasted the stored procedure at the end of this posting because I have come accross a puzzling problem. The query as shown below works correctlly but if I un-comment the delete statement, the preview still works and the columns are still avilable for mapping but I get the following errors when the package is executed.
Error: 0xC02092B4 at Data Flow Task, OLE DB Source [1]: A rowset based on the SQL command was not returned by the OLE DB provider.
Error: 0xC004701A at Data Flow Task, DTS.Pipeline: component "OLE DB Source" (1) failed the pre-execute phase and returned error code 0xC02092B4.
I realise that I could execute the delete query in a separate SSIS package step but I am curious as to why there is a problem with the way I tried to do it.
At one stage the stored procedure used a temp table and later I also experimented with a table variable. In both cases I got similar errors at execution time. In the case of the temp table there was another problem in that, while the preview worked, there were no columns available for mapping. Using a table variable seemed to overcome this problem but I still got the run time error. eventually I found a way to avoid using either a temp table or a table variable and the package then worked correctly, copying the data into the desitnation table.
It seems to me that if there is any complexity at all to the stored procedure, these errors seem to occur. Can anyone enlighten me as to what the "rules of engagement" are in this regard? Is one solution to use a wrapper stored procedure that simply calls the more complex one?
ALTER procedure [dbo].[usp_ValveStatusForDay]
(
@dateTime DateTime,
@reportName VarChar(100)
)
AS
BEGIN
DECLARE @day VarChar(10)
DECLARE @month VarChar(10)
DECLARE @year VarChar(10)
DECLARE @start VarChar(25)
DECLARE @end VarChar(25)
SET @day = Convert(Varchar(10),DatePart(day, @dateTime))
SET @month = Convert(VarChar(10), DatePart(month, @dateTime))
SET @year = Convert(VarChar(10), DatePart(year, @dateTime))
I am trying to use the DataReader Source to import a table from a PostgresSQL database into a new table in SQL 2005 database. It works for all tables except one, which has over 80,000 records with long text columns. When I limit the import to fraction of records (3,000 to 4,000 records) it works fine but when I try to get all it generates the following errors:
Source: DataReader using ADO.NET and ODBC driver to access PostgresSQL table Destination: OLE DB Destination - new table in SQL 2005 (BTW - successful import with DTS packagein SQL 2000)
---Errors Error: 0x80070050 at Import File, DTS.Pipeline: The file exists.
Error: 0xC0048019 at Import File, DTS.Pipeline: The buffer manager could not get a temporary file name. The call to GetTempFileName failed.
Error: 0xC0048013 at Import File, DTS.Pipeline: The buffer manager could not create a temporary file on the path "C:Documents and SettingsmichaelshLocal SettingsTemp". The path will not be considered for temporary storage again.
Error: 0xC0047070 at Import File, DTS.Pipeline: The buffer manager cannot create a file to spool a long object on the directories named in the BLOBTempStoragePath property. Either an incorrect file name was provided, or there are no permissions.
Error: 0xC0209029 at Import File, DataReader Source - Articles [1]: The "component "DataReader Source - Articles" (1)" failed because error code 0x80004005 occurred, and the error row disposition on "output column "probsumm" (1639)" specifies failure on error. An error occurred on the specified object of the specified component.
Error: 0xC02090F5 at Import File, DataReader Source - Articles [1]: The component "DataReader Source - Articles" (1) was unable to process the data.
Error: 0xC0047038 at Import File, DTS.Pipeline: The PrimeOutput method on component "DataReader Source - Articles" (1) returned error code 0xC02090F5. The component returned a failure code when the pipeline engine called PrimeOutput(). The meaning of the failure code is defined by the component, but the error is fatal and the pipeline stopped executing. ---End
Any idea why it can't create a temp file or why it complains about the "The File exists", which file, where, etc. Any help or alternative suggestions are greatly appreciated. What I am missing or doing wrong here?
The goal is to address visual source safe database on the network. We have the srcsafe.ini in the network as \ipaddrsrcsafe.ini. Now I create a new VSSDatabase object and call its OpenDb. Well for simple consle app or winform it is ok. But I was running it under Sql server Stored Procedure. It failed for I cannot access the source safe path throgh the COM object.
I know it is because of Windows identity. So I add the following code before I want to open the database, changing the to the WindowsIdentity: WindowsIdentity impersonId = SqlContext.WindowsIdentity; WindowsImpersonationContext orgCtx = null; try { orgCtx = impersonId.Impersonate(); VSS_Database = new MVSI.VSSDatabase(); // VSS_Database.ImpersonateCaller = true; VSS_Database.Open(Path, UserName, PassWord); } catch (Exception err) {
Without the commented line "// VSS_Database.ImpersonateCaller = true", this does not work at all. It just behave like no changes to the windows identity. However if I add this code, well, OpenDb will result in a No-response query. The Sql server is running the query with no responses. Have you ever met that before? I am really frustrated. Thanks
I'm trying to build a DTS package which would send data to AS400 after deleting existing data from AS400 table first. At the moment I can't make it because:
1) If I'm using "IBM DB2 UDB for iSeries OLE DB Provider" as a data source, I can't store the password in the connection which is really really strange?? Because the password isn't saved, the package can't be scheduled because someone needs to type in the password. Stupid.
2) If I'm using "iSeries Access ODBC Driver" I can't execute SQL DELETE over that connection. SELECT Works well but DELETE won't work. I'll get error message which says "HResult of 0x80040e14 (-2147217900) returned. Unexpected error occured. An error result was returned without an error message."
3) Transform Data Task fails when I'm using "iSeries Access ODBC Driver". Error message says that the number of failing rows exceeds the maximum. If I'll raise the max error number, the step executes, but 0 records are sent.
Somehow I get this feeling, that with "iSeries Access ODBC Driver" I cannot send, delete, update etc in AS400 and with "IBM DB2 UDB for iSeries OLE DB Provider" it could be done IF the password could be stored in connection.
Help anybody? How to store the password in OLE DB or how to delete & send data with ODBC connection.
We are having trouble connecting to an IBM DB2 on iSeries data source in SSIS. In SQL2000 DTS we had no trouble connecting to this data source using an ODBC DSN. We have tried using the OLE DB providers for iSeries that comes with SQL2005. We are able to connect, but are unable to retrieve column information to use in mapping to a SQL2005 data destination. Has anyone successfully made this type of connection and data flow in SSIS? If so, please tell us how you did it. Thanks in advance!
I am using execute sql task to run a stored procedure in oracle database which returns a resultset. This works. Now I need to send the ouput to a destination table in a sql database. Should I use for each loop to pick the resultset and insert it into the destination one by one (which I dont think is a great idea) or is there a better way to accomplish this task (in data flow task) ?
When I use dataflow task instead of execute sql task, the main issue is I am not able to see the output columns when I execute an oracle stored procedure, but when I see the preview I can see the resultset . But I can see the output columns for a sql server stored procedure.
I am new to SQL Server. I have some basic questions.
I have installed SQL Server Developer Edition on a Windows XP Media center edition. The installation is successful. Now I am trying to create an ODBC, but I there are some options which I am not quite sure about.
e.g.
1. How SQL Server verify the authenticity of the login ID? A. Windows NT.... B. SQL Server....
Client Configuration: Server alias: ??? Named Pipes: What should be the values of [pipe name]?
or should i choose other options?....
And I when I use Query Analyzer to connect to Server, the authentication fails..
Can some one point me to the right direction, or if there's some documentation on this subject, that would be very much appreciated.
I'm trying to import tables from COBOL thru Relativity client. With SQL Server 2000, I used Other (ODBC Data Source) to do this. I cannot find a comparible data source in SQL Server 2005. What do I do?
I am new to SSIS packages and want to use an ODBC data source connected to an old Btrieve set of data files. I set up the ODBC DSN, and my SQL Server Data Connection, and can browse the tables in the Server Explorer. However with regards to my SSIS package, I'm not sure whether to use an OLE DB Source or Data Reader Source. I have futzed with both of them but haven't had any luck at seeing the tables. Can someone please give me some tips.
A data reader is using a connection manager to connect to an ODBC System DSN . A query in the SqlCommand property is provided. Data is being truncated in the only string column . The data type in data reader output-->external columns shows as Unicode string [DT_WSTR] Length 7.
The truncated output in a text file is the first 3 characters from left to right . Changing the column order has no effect.
A linked server was created in SQL Server Management Studio to test the ODBC System DSN using the following:
Data returned using "OPENQUERY" does not truncate the string column indicating that the ODBC Driver returns data as expected with sql 2005, but not with the Data Reader.
I'm trying to create an ODBC Data Source on both an NT 4.0 server and 2000 Professional workstation that are remote. I can not seem to get them to connect. What do I put in the server name field when creating the network library connection? I have tried both the ip address and fully qualified domain name of the sql server and neither worked.
As other contributors, all I am trying to do is import data from an ODBC source (spelled 'non-Microsoft data source') into a SQL 2005 table. I can easily do this in SQL 2000 with DTS, but when I use the same DSN in VS 2005 it doesn't work.
I created an integration project, and made a connection in Connection Manager to the DSN and clicked Test Connection. It succeeded, or so it claimed.
Click OK and drag a DataReader Source onto the Data Flow surface Doubleclick it and select the connection manager per above. Note the error: Error at Data Flow Task [DataReader Source[50]]: Cannot acquire a managed connection from the run-time connection manager.
What does that mean? More to the point, how to fix it?
My replication of those SQL 2000 servers gave errors: Data source (11): General Network Error. Check your network documentation... and ODBC (08S01): Communication link failure. The replication was across the WAN. I don't know where to start to troubleshoot this problem. Please help!
I am running Microsoft SQL Server 2005 Express Edition, and I am having difficulties setting up an ODBC User Data Source to connect to the SQL server. I have tried going through "Control Panel -> Administrative Tools -> Data Sources (ODBC)" to add a user data source. For the SQL Server to connect to, I have tried specifying "localhostSQLEXPRESS", "SQLEXPRESS", "(local)", etc. -- but nothing seems to work. When the DSN configuration wizard tries to connect to the SQL Server to obtain default settings, it fails with the error "SQL Server does not exist or access denied". (Same error occurs if I try connecting to this ODBC data source later.) But I know that the SQL Server exists and I have been using it through the SQL Server data provider in another application. I am new to this, so any help or pointers would be greatly appreciated. Thanks, Kumar
I have been using ODBC data source administrator for years without any problem. However, after a unsuccesful MSSQL7.0 installation, i keep getting the following message:
"An error occurred while windows was working with the control panel file
D:WINNTSystem32Odbccp32.cpl"
Any insight into this would be greatly appreciated.
We have more than 10 databases on the same server. When I try to set up ODBC connection through my desktop to a specific database (DB1) using SQL authentication, it acts weird:
-- I give the login (testkz) access to DB1, DB1 does not show up in the default database list; I tried to type in the database name, it is not taken
-- If I give 'testkz' access to two other databases (and only these two), even though I did not give access to DB1, DB1 together with some other databases show up on the default database list. Seems to me that there are some dependency among the dbs.
I am trying to setup an ODBC data source for Access. The server I'm trying to connect to is 2008 R2. I have SQL Server Management Studio installed on the computer where I'm trying to make the ODBC Data Source from. I can connect the the remote 2008 server through Management Studio, but in the ODBC wizard I do the following:
"Machine Data Source" tab, click "New" Select "User Data Source", click "Next >" Select "SQL Server", click "Next >" Click "Finish" Name: remote Description: remote Server: type the server name ie "sql.somewhere.com"