1

我正在使用其他人的代码,而我一点也不擅长 C#!

我需要乘以total1total2。下面的代码给了我answer = 0,这是不对的。这里有什么问题?!此外,total1如果重要,值将作为 int 保存在 MS SQL 数据库中。当我在最后一行设置断点时,我注意到它的读取total2方式为 as9total1as "15"(带引号)。

System.Data.OleDb.OleDbConnection pcn;
System.Data.OleDb.OleDbCommand pcm;
System.Data.OleDb.OleDbDataReader prs;
pcn = new System.Data.OleDb.OleDbConnection("");
pcm = new System.Data.OleDb.OleDbCommand();
pcn.Open();
pcm.Connection = pcn;
var tableSql = String.Format(@"select sum(TicSold) as total1 from BusTickets where TicketType = '9'");
pcm.CommandText = tableSql;
prs = pcm.ExecuteReader();
var rowcount = 0;
while (prs.Read())
{
    rowcount++;
    total1 = prs["total1"].ToString();
}
prs.Close();
pcn.Close();

int total2 = 9;
int answer = total2 * Convert.ToInt32(total1);

更新:通过使用下面贾斯汀的方法,我能够得到显示正确数字而不是 0 的答案,但现在我想在 .aspx 页面上显示“答案”。以前,我会将其公开(public int answer),然后在我的 html 中放入 <%= answer %> 以显示金额。但它仍然显示0。上面的代码是我的代码,下面的代码是我的主页。再次,抱歉缺乏这方面的知识,我正在学习。

Total Ticket Profit: <strong><%= answer %></strong></p>
        </div> 
4

4 回答 4

3

该值应该已经是来自数据库的整数,因此,在读取该值时,您应该只需要转换该值:

int total1 = (int)prs["total1"];
于 2013-04-17T01:03:42.990 回答
2

查看Convert.ToInt32帮助页面,您有返回值显示:

Type: System.Int32
A 32-bit signed integer that is equivalent to the number in value, or 0 (zero) if value is null.

因此,作为 total1 的值的“15”必须从该Convert方法返回 0,在乘法之后为您提供总零 (0)。

我建议使用

int answer = 0;
int myTotal = 0;

if(int.TryParse(total1, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.CurrentCulture,out myTotal))
{
     answer = myTotal * total2;
}

更新

您更新的问题看起来可以通过查看这篇文章来回答。它将变量定义为公共属性,然后以类似于您的方式调用它<%=answer%>

public string Answer { get { return answer.ToString(); } }

或返回您正在显示的计算答案的方法的结果(假设其返回值为答案)。

于 2013-04-17T01:30:47.570 回答
1

总计1 ISNULL ?

int iTotal1 = answer  = 0;
if(int.TryParse(total1,out iTotal1 ))
{
     answer = total2 * Convert.ToInt32(total1);
}else{
    // total1 Not Int
}
于 2013-04-17T01:08:14.553 回答
1

除了其他人在对您的原始问题的评论中已经提出的问题之外,我建议您改为查看ExecuteScalar方法,因为当只返回一个结果时,您实际上并不需要遍历记录集。

但是,要回答你的问题,从哪里来total2?变量total1本身肯定会返回一个字符串,因为当您设置它时,您会将 DB 结果转换为字符串。(这个变量在哪里被声明?例如,string total1?)尝试改为 delcaring as int total1and then 当得到结果时,total1 = Convert.ToInt32(prs["total1"]);. 我希望这对您有所帮助并祝您好运!

于 2013-04-17T01:08:47.960 回答