Cách tốt nhất để tạo đối tượng DataTable trống với lược đồ của bảng máy chủ sql là gì?Cần lấy dữ liệu rỗng trong .net với lược đồ bảng cơ sở dữ liệu
Trả lời
Một tuyên bố tôi nghĩ là đáng nói là SET FMTONLY:
SET FMTONLY ON;
SELECT * FROM SomeTable
SET FMTONLY OFF;
Không có hàng được xử lý hoặc gửi cho khách hàng vì sự yêu cầu khi SET FMTONLY được bật ON.
Lý do điều này có thể hữu ích là vì bạn có thể cung cấp bất kỳ truy vấn/thủ tục lưu trữ nào và chỉ trả về siêu dữ liệu của resultset.
Giả sử rằng bạn có thể kết nối với cơ sở dữ liệu SQL chứa các bảng mà bạn muốn sao chép tại thời điểm đó khi bạn muốn làm điều này, bạn có thể sử dụng một resultset thông thường để chuyển đổi DataTable, sử dụng
select * from <tablename> where 1=2
làm truy vấn nguồn của bạn.
Điều này sẽ trả lại một tập kết quả trống với cấu trúc của bảng nguồn.
Hãy thử: SELECT TOP 0 * FROM [TableName]
và sử dụng SqlDataAdapter để điền vào một DataSet, sau đó nhận được Bảng từ DataSet đó.
Bạn luôn có thể tạo riêng của bạn:
DataTable table = new DataTable("TableName");
table.Columns.Add(new DataColumn("Col1", typeof(int)));
table.Columns.Add(new DataColumn("Col2", typeof(int)));
table.Columns.Add(new DataColumn("Col3", typeof(string)));
table.Columns.Add(new DataColumn("Col4", typeof(int)));
table.Columns.Add(new DataColumn("Col5", typeof(string)));
Rõ ràng vẽ lại được rằng bạn sẽ phải cập nhật mã của bạn bất cứ khi nào thay đổi giản đồ cơ sở dữ liệu.
Dưới đây là những gì tôi đã làm:
var conn = new SqlConnection("someConnString");
var cmd = new SqlCommand("SET FMTONLY ON; SELECT * FROM MyTable; SET FMTONLY OFF;",conn);
var dt = new DataTable();
conn.Open();
dt.Load(cmd.ExecuteReader());
conn.Dispose();
trình tốt. Cảm ơn AdaTheDev.
công trình này:
Class BlankTableWithSourceTableSchema
Inherits DataTable
Public Sub New(ByVal connstr As String, ByVal sourcetable As String)
Try
Using connection As SqlServerCe.SqlCeConnection = New SqlServerCe.SqlCeConnection(connstr)
Dim adapter As SqlServerCe.SqlCeDataAdapter = New SqlServerCe.SqlCeDataAdapter("SELECT * FROM " & sourcetable, connection)
adapter.TableMappings.Add("Table", "ABlankTable")
adapter.FillSchema(Me, SchemaType.Mapped)
End Using
Catch ex As Exception
End Try
End Sub
End Class
Class BlankTableWithSourceTableSchema
Inherits DataTable
Public Sub New(ByVal connstr As String, ByVal sourcetable As String)
Try
Using connection As SqlServerCe.SqlCeConnection = New SqlServerCe.SqlCeConnection(connstr)
Dim adapter As SqlServerCe.SqlCeDataAdapter = New SqlServerCe.SqlCeDataAdapter("SELECT * FROM " & sourcetable, connection)
adapter.TableMappings.Add("Table", "ABlankTable")
adapter.FillSchema(Me, SchemaType.Mapped)
End Using
Catch ex As Exception
End Try
End Sub
End Class
Tất cả các giải pháp này là chính xác, nhưng nếu bạn muốn có một giải pháp mã tinh khiết được sắp xếp hợp lý cho kịch bản này.
Không có dữ liệu được trả về trong dung dịch này từ CommandBehavior.SchemaOnly được quy định về chức năng ExecuteReader (Command Behavior Documentation)
Giải pháp CommandBehavior.SchemaOnly sẽ thêm SET FMTONLY ON; sql trước khi truy vấn được thực hiện cho bạn như vậy, nó giữ mã của bạn sạch sẽ.
public static DataTable GetDataTableSchemaFromTable(string tableName, SqlConnection sqlConn, SqlTransaction transaction)
{
DataTable dtResult = new DataTable();
using (SqlCommand command = sqlConn.CreateCommand())
{
command.CommandText = String.Format("SELECT TOP 1 * FROM {0}", tableName);
command.CommandType = CommandType.Text;
if (transaction != null)
{
command.Transaction = transaction;
}
SqlDataReader reader = command.ExecuteReader(CommandBehavior.SchemaOnly);
dtResult.Load(reader);
}
return dtResult;
}
- 1. Làm cách nào để chỉ lấy lược đồ cơ sở dữ liệu vào tập dữ liệu?
- 2. Cập nhật lược đồ cơ sở dữ liệu với hibernate
- 3. Truy xuất lược đồ cơ sở dữ liệu
- 4. JavaScript vẽ lược đồ cơ sở dữ liệu
- 5. Lược đồ cơ sở dữ liệu giải mã
- 6. Cách lấy lược đồ bảng từ cơ sở dữ liệu tiến độ thông qua odbc
- 7. heroku không cập nhật lược đồ cơ sở dữ liệu
- 8. Lược đồ Cơ sở Dữ liệu Thăm dò ý kiến
- 9. Sao chép toàn bộ nội dung cơ sở dữ liệu (lược đồ và dữ liệu)
- 10. chiến lược sharding cơ sở dữ liệu
- 11. Lược đồ cơ sở dữ liệu thực tế xấu
- 12. neo4j - đồ thị cơ sở dữ liệu cùng với một cơ sở dữ liệu quan hệ?
- 13. Sơ đồ cơ sở dữ liệu EtherPad?
- 14. Lược đồ cơ sở dữ liệu Sqlite của Android
- 15. Mongoose: Lược đồ cơ sở dữ liệu được đề xuất
- 16. Cập nhật lược đồ cơ sở dữ liệu mà không làm rơi dữ liệu?
- 17. Thiết kế cơ sở dữ liệu tốt (lược đồ) cho cơ sở dữ liệu tham dự là gì?
- 18. Lược đồ cơ sở dữ liệu HR-XML
- 19. Cập nhật lược đồ cơ sở dữ liệu
- 20. XSD cơ sở dữ liệu chuẩn trung gian để mô tả lược đồ cơ sở dữ liệu quan hệ
- 21. Lấy lược đồ XML từ Cơ sở dữ liệu MS SQL
- 22. dữ liệu phân cấp trong cơ sở dữ liệu: truy vấn đệ quy so với bảng đóng so với cơ sở dữ liệu đồ thị
- 23. Cách lấy lược đồ cơ sở dữ liệu của một DB bị ẩn?
- 24. Tài liệu cơ sở dữ liệu Postgresql
- 25. PDO lấy dữ liệu từ cơ sở dữ liệu
- 26. Cách lấy dữ liệu từ cơ sở dữ liệu Parse.com
- 27. Nhận lược đồ cơ sở dữ liệu với một truy vấn?
- 28. Tải dữ liệu vào lược đồ lõi dữ liệu
- 29. Di chuyển cơ sở dữ liệu MySQL phát triển sang cơ sở dữ liệu sản xuất
- 30. Cơ sở dữ liệu nhúng cho .net
thích điều này, hoạt động trên tất cả các cơ sở dữ liệu;) – AsG