2012-03-12 41 views
1

我的申请是说totalTokens是使用未分配的局部变量,我不明白为什么。我必须失去一些明显的东西。这是线。完整的代码如下。 感谢c#sql插入。使用未分配的局部变量?

myCommand.Parameters.Add("@Tokens", totalTokens); 



    private void btnSave_Click(object sender, EventArgs e) 
    { 
     string date = dateTimePicker1.Value.ToShortDateString(); 
     bool library = chkLibrary.Checked = true; 
     string libReason = txtReason.Text; 
     int libMin = Int32.Parse(txtLibTime.Text); 
     int hwMin = Int32.Parse(txtHwTime.Text); 

     int partialTokens; 
     int totalTokens; 
     int totalHw; 

     // calculate Total homework 
     totalHw = libMin + hwMin; 

     // calculate bonus library time 
     partialTokens = totalHw/15; 

     // calculate Total tokens 
     if (chkLibrary.Checked == true) 
     { 
      totalTokens = partialTokens + 1; 
     } 

     using (SqlCeConnection con = new SqlCeConnection(conString)) 
     { 
      SqlCeCommand myCommand = new SqlCeCommand("INSERT INTO ChangeTable" + 
      "(Date, Library, LibMissed, LibTime, HwTime, TotalHomework, Tokens)" + 
      "VALUES(@Date, @Library, @LibMissed, @LibTime, @HwTime, @TotalHomework, @Tokens)", con); 

      myCommand.Parameters.Add("@Date", date); 
      myCommand.Parameters.Add("@Library", library); 
      myCommand.Parameters.Add("@LibMissed", libReason); 
      myCommand.Parameters.Add("@LibTime", libMin); 
      myCommand.Parameters.Add("@HwTime", hwMin); 
      myCommand.Parameters.Add("@TotalHomework", totalHw); 
      myCommand.Parameters.Add("@TotalHomework", totalTokens); 

      con.Open(); 
      myCommand.ExecuteNonQuery(); 
      con.Close(); 

      RefreshGrid(); 
     } 
    } 

回答

3

totalsTokens只有在chkLibrary.Checkedtrue时才会被分配。如果它是false那么它将保持未分配状态。

1
if (chkLibrary.Checked == true) 
     { 
      totalTokens = partialTokens + 1; 
     } 

这是唯一的一次totalTokens被分配到.....所以如果chkLibrary.Checked没有被选中,那么它是一个未赋值的变量。

不知道默认情况下你想要它吗?但也许,当你宣布你想要在你的代码

int totalTokens = 0; 
1

何在这行

myCommand.Parameters.Add("@Tokens", totalTokens); 

你应该mycommand的初始化和con.Open()之间有这样的;

+0

这应该是一个评论。 – Guffa 2012-03-12 02:35:13

1

totalTokens只在该条件内初始化;因此在拨打myCommand.Parameters.Add("@TotalHomework", totalTokens);时不能保证设置。

只要将它初始化为声明它的东西(如0),警告就会消失。

1

的修复基本上是给它分配的某种价值,当你创建它,例如

int partialTokens = 0; 
int totalTokens= 0; 
int totalHw = 0; 

目前,有可能会不具有值分配使用,由于里面有条件转让声明。

4

如果if语句中的条件为真,则只会为totalTokens变量赋值。你必须确保变量总是有一个值。

也许你的意思是这样的:

// calculate Total tokens 
if (chkLibrary.Checked == true) 
{ 
    totalTokens = partialTokens + 1; 
} else { 
    totalTokens = partialTokens; 
} 

边注:如果您使用的变量,你是分配两个值相同的参数,当然,这将覆盖第一个值:

myCommand.Parameters.Add("@TotalHomework", totalHw); 
myCommand.Parameters.Add("@TotalHomework", totalTokens); 
在查询中使用的参数

来看,它应该是:

myCommand.Parameters.Add("@TotalHomework", totalHw); 
myCommand.Parameters.Add("@Tokens", totalTokens);