簡體   English   中英

使用C#創建SQL表

[英]Creating SQL table using C#

我想在循環中使用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的列是:Date(datetime),Value(int)
  • 表2的列是:Date(datetime),ID(varchar(255)),Return(int)

請注意,這兩個表具有不同的列,具有不同的類型。 您對如何實現這一點有什么建議嗎?

謝謝!

您應該將問題分開,首先需要獲取定義列標題的對象列表,然后您可以遍歷該列表並構建查詢。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM