|
Hi all,
I need to be able to read in a CSV and then write all data back to a specified table within Oracle.
At the moment, I have put the following Oracle connection together, but need to read in c:\test.csv for example.
OracleConnection importOraConn = new OracleConnection();
importOraConn.ConnectionString = "User Id=USERNAME,Password=PASSWORD;Data Source=ORACLEDB";
importOraConn.Open();
OracleCommand importOraCommand = importOraConn.CreateCommand();
OracleDataAdapter oda = new OracleDataAdapter(importOraCommand);
Any help with this would be greatly appreciated.
Thanks
|
|
|
|
|
Oracle should have an import wizard you can use and load the data into a temp table then sort it from there.
If you must use code then you need to:
1) open the file as text via code.
2) Get each row from the text file
3) Copy row into an array as the ; being the delimiter of the array
4) transfer the array into an object or fields and sanitise it.
or boadge a sql insert string using the array values.
5) insert this into oracle using as a sql command.
There are a few ways of doing what you want and this is just a suggestion.
|
|
|
|
|
Thanks, that's made things a little clearer of how to do things.
Do you have a snippet of how I get from step one to using insert statements?
Thanks
|
|
|
|
|
public DataSet Get_Friends_Birthday(DateTime d)
{
User=0;
DataSet ds = new DataSet();
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=" + '"' + @"C:\Users\LadyLara\Documents\Visual Studio 2008\Projects\Private Notebook WebService\Private Notebook WebService\App_Data\Private Notebook Database.mdf" + '"' + ";Integrated Security=True;User Instance=True");
string scom = "SELECT FriendID, FFirstName, FLastName, FBirthday, FE_mail1, FE_mail2, FE_mail3, FE_mail4, FPhone_Number1, FPhone_Number2, FPhone_Number3, FPhone_Number4, UserID FROM Friends WHERE (UserID = "+"@IDUS)"+" AND (FBirthday = "+"@Date)";
SqlCommand sqlcom = new SqlCommand(scom,con);
sqlcom.Parameters.Add("IDUS", SqlDbType.Int).Value=User.ToString();
sqlcom.Parameters.Add("DATE", SqlDbType.SmallDateTime).Value=d.ToString();
SqlDataAdapter adapt = new SqlDataAdapter(scom, con);
con.Open();
adapt.Fill(ds);
return ds;
}
when it reaches adapt.fill(ds) i get the folowing error. "System.Data.SqlClient.SqlException: Must declare the scalar variable "@IDUS"."
Please Help!
rzvme
|
|
|
|
|
rzvme wrote: sqlcom.Parameters.Add("IDUS", SqlDbType.Int).Value=User.ToString();
sqlcom.Parameters.Add("DATE", SqlDbType.SmallDateTime).Value=d.ToString();
Prefix your parameter names with @ symbols.
BTW, you should consider not using inline SQL statements. Use stored procedures instead.
Paul Marfleet
"No, his mind is not for rent
To any God or government"
Tom Sawyer - Rush
|
|
|
|
|
i thought about using stored procedures only i don't know exactly how to do this.(oracle fan) and by the way....even with the @ symbol in front of the parametername i still get the exact same error.
rzvme
|
|
|
|
|
string scom = "SELECT FriendID, FFirstName, FLastName, FBirthday, FE_mail1, FE_mail2, FE_mail3, FE_mail4, FPhone_Number1, FPhone_Number2, FPhone_Number3, FPhone_Number4, UserID FROM Friends WHERE (UserID = "+"@IDUS)"+" AND (FBirthday = "+"@Date)";
You don't need to do any string concaternation here.
You should still really consider using stored procedures instead - you wouldn't have these problems if you did.
Paul Marfleet
"No, his mind is not for rent
To any God or government"
Tom Sawyer - Rush
|
|
|
|
|
ALTER PROCEDURE [dbo].[uspGetBirthdayFriends]
@CRK INT
@BDATE SMALLDATETIME
AS
begin
select * from Friends where UserID=@CRK and FBirthday =@BDATE
RETURN
end
same error
incorrect sintax near '@BDATE'
must declare scalar variable "@crk"
rzvme
|
|
|
|
|
You have made a syntax error. Each parameter declaration should be separated by a comma.
Paul Marfleet
"No, his mind is not for rent
To any God or government"
Tom Sawyer - Rush
|
|
|
|
|
Thank you. That worked. But now i get another error and i can't seem to determine the cause
after i invoke
adapt.Fill(ds);
/*This is the code of the procedure*/
ALTER PROCEDURE dbo.uspGetBirthdayFriends
@CRK INT,
@BDATE SMALLDATETIME
AS
begin
declare @ID int
declare @BDATE smalldatetime
select * from Friends where UserID=@ID and FBirthday =@BDATE
end
RETURN
i get the following error "Procedure uspGetBirthdayFriends has no parameters and arguments were supplied."
Thank you
rzvme
|
|
|
|
|
You've declared @BDATE twice in your SP - once as a parameter and secondly as a variable. This code won't complile - remove your variable declaration.
Paul Marfleet
"No, his mind is not for rent
To any God or government"
Tom Sawyer - Rush
|
|
|
|
|
You should really pass @ID in. Change it to:
dbo.uspGetBirthdayFriends
@ID INT,
@BDATE SMALLDATETIME
AS
begin
select * from Friends where UserID=@ID and FBirthday =@BDATE
end
RETURN From what I saw of your earlier post, you also seem to have a problem with the way you are handling your parameter. When you add in the SqlParameter, you need to put the parameter in with an @ in front of the name, e.g. command.Parameters.Add(new SqlParameter("@ID", SqlDbType.Int));
|
|
|
|
|
Thank you very much. Both of you. I finaly solved the problem.
rzvme
|
|
|
|
|
pmarfleet wrote: You don't need to do any string concaternation here.
Yes, that is dangerous.
"Real programmers just throw a bunch of 1s and 0s at the computer to see what sticks" - Pete O'Hanlon
|
|
|
|
|
I wrote the following code. application runs , no error but it does not display any data. What will be the problem with it? some one please help me.although code i tokk is from book, but still there is problem...
using System;
using System.Data.SqlClient;
namespace ConsoleApplication2
{
public class ExecuteReadExample
{
public static void Main(string[] args)
{
// string source = "server = \\10.8.7.67" + "integrated security=SSPI;" + "database=Northwind";
//string select = " SELECT ContactName, CompanyName FROM Customers";
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\App1\Your_Database_Name.mdb; User Id=admin; Password="
SqlConnection conn = new SqlConnection(source);
conn.Open();
SqlCommand cmd = new SqlCommand(select, conn);
SqlDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
Console.WriteLine("Contact : {0,-20} company : {1}" , reader[0] , reader[1]);
}
}
}
}
Safdar Khan
|
|
|
|
|
Check your query. Does it return any data if you run it through Access?
Paul Marfleet
"No, his mind is not for rent
To any God or government"
Tom Sawyer - Rush
|
|
|
|
|
Thanks a lot. OK,I do that but still it didn't work.
Safdar Khan
|
|
|
|
|
Look at Mike's reply[^]. What he says is correct. You are using the SQL Server classes when you should be using the OleDb classes.
Paul Marfleet
"No, his mind is not for rent
To any God or government"
Tom Sawyer - Rush
|
|
|
|
|
That's an OLE DB connection string to use the Jet database engine in-process. It won't work for SQL Server.
If you want to connect to SQL Server, use a SQL Server connection string. If you want to use Jet with that connection string, use OleDbConnection.
DoEvents : Generating unexpected recursion since 1991
|
|
|
|
|
<br />
SELECT ID, time, type, ((first + last) * 0.5) AS avg10, (CASE WHEN (a.ID+1) <br />
% 5 = 0 THEN<br />
(SELECT ((c.first + c.last) * 0.5)<br />
FROM a, tmp_ak000002_50 c<br />
WHERE c.ID = (a.ID + 1) / 5 - 1) WHEN a.ID =<br />
(SELECT MAX(a.ID)<br />
FROM a) AND (a.ID + 1) % 5 != 0) THEN<br />
(SELECT ((c.first + c.last) * 0.5)<br />
FROM a, tmp_ak000002_50 c<br />
WHERE c.ID = (a.ID + 1 + 4) / 5 - 1) ELSE NULL END) AS avg50<br />
INTO NewTable<br />
FROM tmp_ak000002_10 a<br />
-- modified at 8:34 Wednesday 28th November, 2007
|
|
|
|
|
SELECT ID, time, type, ((first + last) * 0.5) AS avg10,
( CASE WHEN (a.ID+1) % 5 = 0 THEN
(
SELECT ((c.first + c.last) * 0.5) FROM a, tmp_ak000002_50 c WHERE c.ID = (a.ID + 1) / 5 - 1)
WHEN a.ID = (SELECT MAX(a.ID) FROM a) AND (a.ID + 1) % 5 != 0 THEN
(
SELECT ((c.first + c.last) * 0.5) FROM a, tmp_ak000002_50 c WHERE c.ID = (a.ID + 1 + 4) / 5 - 1)
ELSE NULL END) AS avg50
INTO NewTable
FROM tmp_ak000002_10 a
oops...I didn't see the [solved] in the title....
SG
Cause is effect concealed. Effect is cause revealed.
|
|
|
|
|
i cant solve this problem
adding with this cmd ;
cmdInsert.Parameters.AddWithValue("@RECORD_DATE", DateTime.Today.ToString("dd/MM/yyyy"));
Gettin' this error.
Arithmetic overflow error converting expression to data type datetime.
|
|
|
|
|
What's wrong with:
<br />
cmdInsert.Parameters.AddWithValue("@RECORD_DATE", DateTime.Today);
What data type is record_date?
|
|
|
|
|
oops i found problem.. Problem is my sql command . i was changing datetime.today to string and getting error. thanx for help Paddy Boys .
|
|
|
|
|
there is one small thing
cmd.CommandText = "SELECT KODU,CDISMI,CDTURU,CDADET,ACIKLAMA FROM TBL_PS_2" +
" WHERE RECORD_DATE BETWEEN '" + txtDate1.Text + "' AND '" + txtDate2.Text + "' ";
but getting error about datatype char conversion to datetime bla bla.
|
|
|
|