C# 基于DataTable动态更改SQL表

C# 基于DataTable动态更改SQL表,c#,sql-server,C#,Sql Server,我定期从rest提要获取数据,并希望将其复制到SQL表中。使用SQLBulk copy非常简单。 我正在努力解决的问题是,我从提要中获取的字段可能会发生更改,我希望能够向表中动态添加任何新列。任何不再存在的列都需要保留在表中。我可以简单地将它们添加到数据表中 我的问题。我有什么办法可以做到这一点。是否有任何免费的第三方.net框架可以做到这一点,或者如何手动编写。 所有这些都必须在.NET中完成 感谢您声明您正在从rest提要获取数据,然后您可以创建一个简单的ASP网页应用程序 添加一个页面,您

我定期从rest提要获取数据,并希望将其复制到SQL表中。使用SQLBulk copy非常简单。 我正在努力解决的问题是,我从提要中获取的字段可能会发生更改,我希望能够向表中动态添加任何新列。任何不再存在的列都需要保留在表中。我可以简单地将它们添加到数据表中

我的问题。我有什么办法可以做到这一点。是否有任何免费的第三方.net框架可以做到这一点,或者如何手动编写。 所有这些都必须在.NET中完成


感谢您声明您正在从rest提要获取数据,然后您可以创建一个简单的ASP网页应用程序

添加一个页面,您将在其中调用“Rest提要”。 现在Rest提要提供了什么格式 主要使用JSON

您可以将JSON解析为与该提要的数据结构相对应的模型类

然后,只需使用SQLConnection、SQLCommand将数据插入底层数据库

下面是一个示例代码,您可以修改它

string siteContent = string.Empty;
string url = "http://www.RESTFEEDURL.com";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

using(HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using(Stream responseStream = response.GetResponseStream())
using(StreamReader streamReader = new StreamReader(responseStream))
{
    siteContent = streamReader.ReadToEnd();
}
//NOW PARSE THE DATA AND SEND TO DATABASE HERE
//data is in siteContent

//now you want to decode the data and get all the column names
var keyArray = Ext.Object.getKeys(Ext.JSON.decode(siteContent));

//if suppose data has following format
//{"ID":"1","name":"google","IP":"69.5.33.22","active":"true"}
//{"ID":"2","name":"bing","IP":"70.5.232.33","active":"false"}
console.log(keyArray);
// ["ID","name","IP","active"]

now 
foreach(var item as keyArray)
{
sql = "IF COL_LENGTH('TABLENAME', item) IS NULL alter table [TABLENAME] add [item] int default 0 NOT NULL"
//run this sql query using sql command and see the magic
}

我已经在读取数据并将数据添加到数据库表中。我遇到的问题是,如果需要添加额外的列,如何更改数据库表。根据第三方消息中的内容更改表列是个坏主意。您应该考虑将消息保存在表字段中,或者尝试更多地了解第三方消息的结构,并设计表以满足消息的最高复杂度和最低复杂度。更改表不是一个好主意。构造表以获取XML或JSON并进行相应的查询。如果确实必须忽略新字段的语义内容,则使用实体属性表(又名属性包)存储新字段和值:Schliemann