Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SqlDataReader和动态格式化读取数据_C#_Sql_Visual Studio 2010_String Formatting_Sqldatareader - Fatal编程技术网

C# SqlDataReader和动态格式化读取数据

C# SqlDataReader和动态格式化读取数据,c#,sql,visual-studio-2010,string-formatting,sqldatareader,C#,Sql,Visual Studio 2010,String Formatting,Sqldatareader,我有一个C#应用程序,它从存储过程中读取数据,然后创建一条消息。我正在使用SqlDataReader从数据库中读取信息。以前,每当我有一个不同类型的消息并且它失去控制时,我必须创建一个新类。我所说的“不同”是指每列包含不同数量的列和/或不同类型的数据。我试图使添加不同的消息类型变得更容易,并且不确定如何在读取数据时动态格式化数据。我试图在数据读入数据变量后格式化数据,但它只是垃圾,因为它被格式化为错误的类型。所以,当我读入变量时,我目前看到的唯一处理数据的方法是,我不知道如何处理 我的信息格式如

我有一个C#应用程序,它从存储过程中读取数据,然后创建一条消息。我正在使用SqlDataReader从数据库中读取信息。以前,每当我有一个不同类型的消息并且它失去控制时,我必须创建一个新类。我所说的“不同”是指每列包含不同数量的列和/或不同类型的数据。我试图使添加不同的消息类型变得更容易,并且不确定如何在读取数据时动态格式化数据。我试图在数据读入数据变量后格式化数据,但它只是垃圾,因为它被格式化为错误的类型。所以,当我读入变量时,我目前看到的唯一处理数据的方法是,我不知道如何处理

我的信息格式如下:

Message
   Subject
   (Text)
     MessageHeader1
     MessageHeader2
     Title
     Header1
     Header2
     Header3
     (Data)
        Data1
        Data2
        Data3
问题在于数据变量可能包含不同类型的信息。它当前可能包含字符串、整数、日期、百分比等。是否有方法基于其他值或其他方法格式化数据,以便正确格式化不同类型的数据

if (dr.Read())
{
    message.Subject = dr["Subject"].ToString();
    message.MessageText = new AlertMessageText()
    {
        MessageHeader1 = dr["MessageHeader1"].ToString(),
        MessageHeader2 = dr["MessageHeader2"].ToString(),
        Title = dr["Title"].ToString(),
        Header1 = dr["Header1"].ToString(),
        Header2 = dr["Header2"].ToString(),
        Header3 = dr["Header3"].ToString(),
        MessageData = new List<AlertMessageData>(),
    };
}

...

while (dr.Read())
{
    message.MessageText.MessageData.Add(new AlertMessageData()
        {
            Data1 = string.Format("{0:n0}", dr["Data1"]),
            Data2 = string.Format("{0:n0}", dr["Data2"]),
            Data3 = string.Format("{0:MM/dd/yyyy}", dr["Data3"]),    // Formats Data as a Date 
        });
}
if(dr.Read())
{
message.Subject=dr[“Subject”].ToString();
message.MessageText=新建AlertMessageText()
{
MessageHeader1=dr[“MessageHeader1”].ToString(),
MessageHeader2=dr[“MessageHeader2”].ToString(),
Title=dr[“Title”].ToString(),
Header1=dr[“Header1”].ToString(),
Header2=dr[“Header2”].ToString(),
Header3=dr[“Header3”].ToString(),
MessageData=新列表(),
};
}
...
while(dr.Read())
{
message.MessageText.MessageData.Add(新的AlertMessageData()
{
Data1=string.Format(“{0:n0}”,dr[“Data1”]),
Data2=string.Format(“{0:n0}”,dr[“Data2”]),
Data3=string.Format(“{0:MM/dd/yyyy}”,dr[“Data3”]),//将数据格式化为日期
});
}

您可以使用IDataReader的
GetFieldType()
方法查找字段的类型

例如,要查找第一个字段的类型,它如下所示:

Type t = dr.GetFieldType(0)
如果知道字段的类型,可以使用IDataReader的“Get()”方法之一自动转换。例如,如果您知道第一个字段是双精度字段,则可以执行以下操作:

double d = dr.GetDouble(0);
while (dr.Read())
{
    var msg = new AlertMessageData();
    for (int i = 1; i < 4; i++)
    {
         var value = dr["Data" + i];
         string format = "{0:n0}";
         if (value is DateTime)
         {
            format = "{0:MM/dd/yyyy}";
         } 
         else if (value is string)
         {
            format = "{0}";
         }      

         var stringValue = string.Format(format, value);
         if (i == 1) msg.Data1 = stringValue;
         if (i == 2) msg.Data2 = stringValue;
         if (i == 3) msg.Data3 = stringValue;
    }
    message.MessageText.MessageData.Add(msg);
}

要确定值的数据类型,然后应用特定格式,可以执行以下操作:

double d = dr.GetDouble(0);
while (dr.Read())
{
    var msg = new AlertMessageData();
    for (int i = 1; i < 4; i++)
    {
         var value = dr["Data" + i];
         string format = "{0:n0}";
         if (value is DateTime)
         {
            format = "{0:MM/dd/yyyy}";
         } 
         else if (value is string)
         {
            format = "{0}";
         }      

         var stringValue = string.Format(format, value);
         if (i == 1) msg.Data1 = stringValue;
         if (i == 2) msg.Data2 = stringValue;
         if (i == 3) msg.Data3 = stringValue;
    }
    message.MessageText.MessageData.Add(msg);
}
while(dr.Read())
{
var msg=新的AlertMessageData();
对于(int i=1;i<4;i++)
{
var值=dr[“数据”+i];
字符串格式=“{0:n0}”;
if(值为DateTime)
{
format=“{0:MM/dd/yyyy}”;
} 
else if(值为字符串)
{
format=“{0}”;
}      
var stringValue=string.Format(格式,值);
如果(i==1)msg.Data1=stringValue;
如果(i==2)msg.Data2=stringValue;
如果(i==3)msg.Data3=stringValue;
}
message.MessageText.MessageData.Add(msg);
}