Search code examples
c#connection-string

Universal Data Link - File cannot be opened. Ensure it is a valid Data Link file


I am attempting to create a UDL file programmatically in C#. In my program, I want to show the user the Data Link properties window but with my own default values for the connection string. I initially thought to do the following:

string[] lines = new string[]
{
    "[oledb]",
    "; Everything after this line is an OLE DB initstring",
    "Provider=SQLOLEDB.1;Persist Security Info=False"
};

File.WriteAllLines("Test.udl", lines);
Process p = Process.Start("Test.udl");
p.WaitForExit();

However, I get this error when trying to open the file:

File cannot be opened. Ensure it is a valid Data Link file.

This is strange because I created an empty file, named it something.udl, opened it, clicked OK, and then opened the contents of the file which was:

[oledb]
; Everything after this line is an OLE DB initstring
Provider=SQLOLEDB.1;Persist Security Info=False

But there was a newline character at the end of the connection string. I used KDiff to compare the this file and the file I created in my program and it said the "Files are equal text but the they are not binary equal" or something to that effect.

I believe it has to do with how the File.WriteAllLines method writes the strings. So I attempted to use different encodings with the method but with no success. Any ideas on where I am going wrong?

I am using this MSDN link as a reference about UDL files. Its also interesting to note that if I open a new text file and past in all of the lines in my lines array, I arrive at the same error.


Solution

  • All you need to do is use the Unicode encoding:

    File.WriteAllLines("Test.udl", lines, Encoding.Unicode);