Enter your specific information in the “Configuration” section near the top of the script. For the “dbType” variable, the only accepted values are “oracle”, “sqlserver”, or “mysql”. Once this is done, just run the script and you should have your quote-delimited comma-separated CSV file!
The email-related variables are optional. To enable the emailing functionality (send the generated CSV file to the address as an attachment), enter the recipient email address in the box. If you do not wish to email, just leave that variable as empty string (“”), and the other email related variable such as smtp and smtpPort will be ignored.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Data Exporter ' ' ' ' Description: Allows the output of data to CSV file from a SQL ' ' statement to either Oracle, SQL Server, or MySQL ' ' Author: C. Peter Chen, http://dev-notes.com ' ' Version Tracker: ' ' 1.0 20080414 Original version ' ' 1.1 20080807 Added email functionality ' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' option explicit dim dbType, dbHost, dbName, dbUser, dbPass, outputFile, email, subj, body, smtp, smtpPort, sqlstr ''''''''''''''''' ' Configuration ' ''''''''''''''''' dbType = "oracle" ' Valid values: "oracle", "sqlserver", "mysql" dbHost = "dbhost" ' Hostname of the database server dbName = "dbname" ' Name of the database/SID dbUser = "username" ' Name of the user dbPass = "password" ' Password of the above-named user outputFile = "c:\output.csv" ' Path and file name of the output CSV file email = "email@me.here" ' Enter email here should you wish to email the CSV file (as attachment); if no email, leave it as empty string "" subj = "Email Subject" ' The subject of your email; required only if you send the CSV over email body = "Put a message here!" ' The body of your email; required only if you send the CSV over email smtp = "mail.server.com" ' Name of your SMTP server; required only if you send the CSV over email smtpPort = 25 ' SMTP port used by your server, usually 25; required only if you send the CSV over email sqlStr = "select user from dual" ' SQL statement you wish to execute ''''''''''''''''''''' ' End Configuration ' ''''''''''''''''''''' dim fso, conn 'Create filesystem object set fso = CreateObject("Scripting.FileSystemObject") 'Database connection info set Conn = CreateObject("ADODB.connection") Conn.ConnectionTimeout = 30 Conn.CommandTimeout = 30 if dbType = "oracle" then conn.open("Provider=MSDAORA.1;User ID=" & dbUser & ";Password=" & dbPass & ";Data Source=" & dbName & ";Persist Security Info=False") elseif dbType = "sqlserver" then conn.open("Driver={SQL Server};Server=" & dbHost & ";Database=" & dbName & ";Uid=" & dbUser & ";Pwd=" & dbPass & ";") elseif dbType = "mysql" then conn.open("DRIVER={MySQL ODBC 3.51 Driver}; SERVER=" & dbHost & ";PORT=3306;DATABASE=" & dbName & "; UID=" & dbUser & "; PASSWORD=" & dbPass & "; OPTION=3") end if ' Subprocedure to generate data. Two parameters: ' 1. fPath=where to create the file ' 2. sqlstr=the database query sub MakeDataFile(fPath, sqlstr) dim a, showList, intcount set a = fso.createtextfile(fPath) set showList = conn.execute(sqlstr) for intcount = 0 to showList.fields.count -1 if intcount <> showList.fields.count-1 then a.write """" & showList.fields(intcount).name & """," else a.write """" & showList.fields(intcount).name & """" end if next a.writeline "" do while not showList.eof for intcount = 0 to showList.fields.count - 1 if intcount <> showList.fields.count - 1 then a.write """" & showList.fields(intcount).value & """," else a.write """" & showList.fields(intcount).value & """" end if next a.writeline "" showList.movenext loop showList.close set showList = nothing set a = nothing end sub ' Call the subprocedure call MakeDataFile(outputFile,sqlstr) ' Close set fso = nothing conn.close set conn = nothing if email <> "" then dim objMessage Set objMessage = CreateObject("CDO.Message") objMessage.Subject = "Test Email from vbs" objMessage.From = email objMessage.To = email objMessage.TextBody = "Please see attached file." objMessage.AddAttachment outputFile objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = smtp objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = smtpPort objMessage.Configuration.Fields.Update objMessage.Send end if 'You're all done!! Enjoy the file created. msgbox("Data Writer Done!")
Hi,
Your code helped me a lot.
I would need the exported file in UTF-8.
Can you help me there
Thanks a lot
greeting
Porschert Karl
Karl, check out ADODB.Stream and see if that helps you. It seems like it has a Charset property which accepts “utf-8” as its value.
Hi Peter,
My requirement is i want a vbscript which will connect to SQL server and run a query in DB and if any output then send mail if no output then no need of mail just end the script. Can you please help me i am new to VBS so i am finding it difficult
Thanks for visiting Dev-Notes, Thanushree. What if you change the SUB in this example to a FUNCTION, and have it return the number of records written? This way you can do a simple IF statement, only sending email if the returned value is greater than zero.
Hi Peter,
This is my first VB script and i am not getting how to do. can you please given an example code or part of code so that i can refer ?
It would be a great help!!!
You can perhaps simplify it by eliminating the SUB and move all its contents outside, thus making it procedural. Hopefully that reduces the complexity of the VBScript by a degree. Once the logic is outside the SUB, you can just make a number variable, initiated at 0, that increments by 1 every time you go through the FOR loop. Finally, set up an IF statement around the lines that handles emailing so that those lines only run if the variable is greater than 0.
Thank you
Hi,
I have tried this…but it seems its not working for me. Can you please help me out here.
Thanks for visiting Dev-Notes Ashok. Can you tell me more about what is not working? Any specific error messsages?
I have created the batch file to run this vb script but it seems not working,…I have done the changes in the configuration part only.
Output is not getting geneated in the csv file. I have provided all the details…Do i need to do any other settings or config change…
Ashok, can you tell me more about “but it seems not working”? Are you getting any error messages indicating database connection is not being made successfully (username/password issue, security issue, server name typographical error, etc.)? Does the SQL statement work when you run it in your database development tool (SQL*Worksheet, PhpMyAdmin etc.)?
Hi, My SQL query is running in database…When i execute the vb script it just ends up…shows nothing…
Are you running it manually (ie. double-clicking on the VBScript file) or as a scheduled job via Task Scheduler? Try to make sure it runs ok manually first; if there are errors, you will want to see what the error pop ups are. Pop ups may be hidden for scheduled tasks.
I am running manually by clicking on the vbscript..if you have time…can we have a call….
Hm then it may be something environmental on your machine. Sorry I won’t be much help there. One last suggestion I have for you is that you can try to add msgbox at various points of the code, displaying relevant info at each step, and see where things may be failing for you. Is the database connection being made? How many records being returned? File being opened ok? Etc. I hope that will help you.
Thanks again for visiting Dev-Notes!
Giving this error..
—————————
Windows Script Host
—————————
Script: C:\Users\525657\OneDrive – Cognizant\Desktop\VB Script.vbs
Line: 27
Char: 2
Error: Provider cannot be found. It may not be properly installed.
Code: 800A0E7A
Source: ADODB.Connection
—————————
OK
—————————
Please find this section in the code and modify as appropriate:
DRIVER={MySQL ODBC 3.51 Driver}
When I wrote this article back in 2008, and version 3.51 is quite old now. You may wish to update it to match the version number of the ODBC provider installed on your machine.
Hope this helps.
I am using here dbtype as “Oracle”. Since its a oracle database. Do you have any idea what is the provider name of oracle.
That will depend on the version installed on your machine. You can try this website for reference: https://www.connectionstrings.com/
How can we run 2 SQL query here….like
select * from tabl1;
select * from table2;
If the two SQLs will return the same columns, you can look up something called “union” in Oracle.
I am fetching the count from the 2 tables
I’m getting this error with a long SQL script:
Unterminated String constant.
my sql code is about 30 lines long. Is there a way to use one that spans multiple lines?
You will either have to reformat your SQL statement to a single line, or you can enclose each line in double-quotes and add the “&_” symbol to indicate a multi-line string. Example below:
Dim sql
sql = “select a.field1, b.field2, c.field3 ” & _
“from table_a a, table_b b, table_c c ” & _
“where a.id=b.id ” & _
“and b.id=c.id ” & _
“and a.status=’Y’ ” & _
“and b.field2 is not null “