2016-04-06 21 views
4

我正在嘗試以編程方式在C#中創建一個UDL文件。在我的程序中,我想向用戶顯示數據鏈接屬性窗口,但使用我自己的連接字符串默認值。我最初以爲做到以下幾點:通用數據鏈接 - 文件無法打開。確保它是一個有效的數據鏈接文件

文件無法打開:

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(); 

然而,試圖打開該文件時,我得到這個錯誤。確保它是一個有效的數據鏈接文件。

這很奇怪,因爲我創建了一個空文件,將其命名爲something.udl,打開一看,點擊OK,然後打開這是該文件的內容:

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

但是有一個換行符在連接字符串的末尾。我用KDiff來比較這個文件和我在程序中創建的文件,它說「文件是平等的文本,但它們不是二進制平等的」,或者是這種效果。

我相信它與File.WriteAllLines方法如何寫字符串有關。所以我試圖用這種方法使用不同的編碼,但沒有成功。關於我要去哪裏的任何想法都是錯誤的?

我使用this MSDN link作爲關於UDL文件的參考。同樣有趣的是,如果我在lines陣列中的所有行中打開一個新的文本文件,並且出現同樣的錯誤。

+0

[在標題標籤(http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in -their-titles) – stuartd

回答

1

所有你需要做的是使用Unicode編碼:

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

儘管我確信這個解決方案效果很好,但我可以使用'Encoding.GetEncoding'方法以適當的編碼寫入文件。我喜歡不寫已在我正在使用的庫中可用的代碼。 – xadeka

+0

只是爲了避免,我上面的評論是針對你的解決方案之前,你修改你的答案... 是的,這是正確的。我在KDiff發現工作的UDL文件是用Unicode編碼的UTF-16編碼的。所以我使用了'Encoding.Unicode'或'Encoding.GetEncoding(「UTF-16」)' – xadeka