2012-03-12 82 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);