使用 C# 创建 SQL 表
本文关键字:SQL 创建 使用 | 更新日期: 2023-09-27 18:32:59
我想在一个循环中使用 C# 创建两个 SQL 表。每个表都是不同的,其列名存储在数组中。每个列名数组实际上是从 csv 文件的标头中获取的。
### fnames is an array of file paths (2 csv files)
foreach string f in fnames)
{
## snip
using (StreamReader rdr = new StreamReader(f))
{
string header = read.line(); ## This is the array of table columns
}
string tab = Path.GetFileNameWithoutExtension(f);
string query = @"create table "+ tab + ..."; #I am not sure how to write the column names and types dynamically
}
想象一下:
- 表 1 的列是:日期(日期时间)、值(整数)
- 表 2 的列是:日期(日期时间)、ID (varchar(255))、返回(整数)
请注意,这两个表具有不同类型的不同列。您对如何实现这一目标有什么建议吗?
谢谢!
你应该把问题分开,首先你需要得到一个定义列标题的对象列表,之后你可以循环访问该列表并构建查询。
class HeaderInfo
{
public HeaderInfo(string header)
{
throw new NotImplementedException("Parse out your header info here and populate the class")
}
public string Name {get; private set;}
public string TypeInfo {get; private set;}
}
private List<HeaderInfo> ParseHeader(string header)
{
var headerInfo = new List<HeaderInfo>();
string[] headerItems = //Split your header line in to indvidual items some how
foreach(headerItem in headerItems)
{
headerInfo.Add(new HeaderInfo(headerItem));
}
return headerInfo;
}
private string TableString(List<HeaderInfo> headerInfo)
{
StringBuilder sb = new StringBuilder();
foreach(var info in headerInfo)
{
sb.AppendFormat("{0} {1}, ", info.Name, info.TypeInfo);
}
sb.Remove(sb.Length -2, 2); //Remove the last ", "
return sb.ToString();
}
private void YourMethod(string[] fnames)
{
### fnames is an array of file paths (2 csv files)
foreach string f in fnames)
{
## snip
List<HeaderInfo> headerInfo;
using (StreamReader rdr = new StreamReader(f))
{
string headerLine = read.line(); ## This is the array of table columns
headerInfo = ParseHeader(headerLine);
}
string tab = Path.GetFileNameWithoutExtension(f);
string query = String.Format(@"create table [{0}] ({1})", tab, TableString(headerInfo));
}
}