2009-09-04 30 views
14

Tôi muốn lưu trữ các tập lệnh .sql dài trong giải pháp của mình và thực thi chúng theo chương trình. Tôi đã tìm ra cách thực hiện một chuỗi chứa kịch bản sql của mình nhưng tôi đã không tìm ra cách đọc chuỗi từ một tệp sẽ được lưu trữ trong giải pháp (ví dụ dưới thư mục con/Scripts).Thực thi tập lệnh SQL được lưu trữ dưới dạng tài nguyên

+0

Có một câu trả lời cũng tin chi tiết về nguồn nhúng trong một câu hỏi trùng lặp https://stackoverflow.com/questions/23301964/ef-6-code-first-with-custom-stored -procedure/39673550 # 39673550 –

Trả lời

19

Đầu tiên, hãy chỉnh sửa thuộc tính của tệp .sql để nó sẽ được nhúng dưới dạng tài nguyên.

Sau đó, sử dụng mã tương tự như sau để lấy kịch bản:

string commandText; 
Assembly thisAssembly = Assembly.GetExecutingAssembly(); 
using (Stream s = thisAssembly.GetManifestResourceStream(
     "{project default namespace}.{path in project}.{filename}.sql")) 
{ 
    using (StreamReader sr = new StreamReader(s)) 
    { 
     commandText = sr.ReadToEnd(); 
    } 
} 
+2

@Will - Trong dự án SQL CLR dường như không có cách nào để thêm tệp tài nguyên được nhập mạnh mẽ. – jpierson

+1

@Các tài nguyên cũng là một giải pháp kém, imho. Dường như không có cách nào để sửa đổi các nhận xét XML được tạo ra và tóm tắt như * Tìm kiếm một chuỗi được bản địa hóa tương tự như tạo bảng dbo.Foo (... * rất khó sử dụng. – Stijn

24

Thêm các tập tin SQL để dự án của bạn sau đó tạo ra một file resource mới. Mở tệp SQL và chọn 'Tệp' từ trình đơn thả xuống trên cùng bên trái (mặc định là Chuỗi). Sau đó nhấn thêm tài nguyên và điều hướng đến/chọn tệp SQL. Điều này cho phép bạn để có được SQL từ tập tin tài nguyên mà không làm mất kiểu an toàn của bạn như sau:

SqlFiles.SqlScript

Trên đây là quá trình trong Visual Studio 2010. Tôi cũng đã viết về vấn đề này trên my blog.

+0

Biết đây là một bài cũ. rất gọn gàng, nhưng làm thế nào để bạn đi về việc thêm các tham số cho kịch bản? – zmaster

+0

Bạn sẽ có thể sử dụng 'string.Format' cho việc này. –

+0

Thêm vào resrouces và đặt tệp thành Tài nguyên, trong mã viết NAMESPACE.Properties.Resources .ScriptDB.ToString() –

0

Add file để Tài, và thiết lập tập tin để Resource, trong mã viết:

String SQLCommand = NAMESPACE.Properties.Resources.ScriptDB.ToString() 
0

Sử dụng QueryFirst. Bạn đặt sql của bạn trong mẫu .sql do công cụ cung cấp. Phía sau hậu trường, QueryFirst biên dịch nó dưới dạng tài nguyên và kết nối cuộc gọi để truy xuất nó khi chạy. Bạn chỉ cần lo lắng về việc gọi Execute() trên lớp trình bao bọc được tạo ra và kết quả của bạn có thể truy cập được thông qua các POCO được tạo ra. Kết thúc an toàn loại kết thúc. Không bao giờ phải nhớ một tên cột hoặc datatype, cộng với những lợi thế đáng kể của việc có sql của bạn, nơi thần dự định ... trong một tập tin .sql.

từ chối trách nhiệm: Tôi đã viết QueryFirst

Các vấn đề liên quan