如何在C#控制台中创建一个保持其值的方法
我想用一种与main方法不同的方法从MS-Access数据库上传和下载数据。正如您从下面的代码中所看到的,每次我想要从方法中得到一些东西时,都会调用整个方法 这是一个问题,因为我首先使用如何在C#控制台中创建一个保持其值的方法,c#,ms-access,methods,console,C#,Ms Access,Methods,Console,我想用一种与main方法不同的方法从MS-Access数据库上传和下载数据。正如您从下面的代码中所看到的,每次我想要从方法中得到一些东西时,都会调用整个方法 这是一个问题,因为我首先使用数据库(“2”、“0”、“0”、“0”)//从数据库下载信息以单独的方法将Access数据库中的所有数据下载到阵列中。然后我想在特定的时间使用特定的数组值,例如Console.WriteLine(数据库(“4”、“1”、“1”、“0”)) 最后用数据库(“1”、“0”、“0”、“0”)更新数据库//将信息上载到数
数据库(“2”、“0”、“0”、“0”)//从数据库下载信息
以单独的方法将Access数据库中的所有数据下载到阵列中。然后我想在特定的时间使用特定的数组值,例如Console.WriteLine(数据库(“4”、“1”、“1”、“0”))
最后用数据库(“1”、“0”、“0”、“0”)更新数据库//将信息上载到数据库
我遇到的问题是每次调用变量都会导致空数组和变量。是否有一种方法可以在相同的方法中执行上述所有操作,以便第二次调用(用于数组中的数据)可以使用第一次调用(用于将信息下载到数组中)放入数组中的数据
我知道,您可以在每次需要时从access数据库中调用所有数据,但这将占用大量内存,因此执行编码的时间更长
static string Database(string sCalling, string sGB, string sType, string sNumber)
{
string sBack = "";
string sPlayerName, sNameInput, sTemp, sFirst, sSecond;
int iOne, iTwo, iOneD, iTwoD, iCounter, iUpdate, iLevel, iDamage, iPos, k, t, u, iLength, iPlayerLevel, iPlayerDamage, iNameSort, iPlaceHolder;
iCounter = 0;
string[] sPos = new string[10], sDamage = new string[10], sLevel = new string[10], sNames = new string[10];
string[] sGPID = new string[6], sGPName = new string[6], sGA1 = new string[6], sGA2 = new string[6], sGA3 = new string[6], sGHPmin = new string[6], sGHPmax = new string[6], sGAmin = new string[6], sGAmax = new string[6];
string[] sBPID = new string[20], sBPName = new string[20], sBA1 = new string[20], sBA2 = new string[20], sBA3 = new string[20], sBHPmin = new string[20], sBHPmax = new string[20], sBAmin = new string[20], sBAmax = new string[20];
string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data Source=PokemonConsole.mdb";
string queryString;
if (sCalling == "1")//Upload info from Database
{
for (iUpdate = 0; iUpdate <= 9; iUpdate++)
{
sPlayerName = sNames[iUpdate];
iLevel = Convert.ToInt32(sLevel[iUpdate]);
iDamage = Convert.ToInt32(sDamage[iUpdate]);
iPos = iUpdate + 1;
queryString = "UPDATE Scores SET PlayerName= @pPN, [Level]= @plvl, DamageReceived= @pdmg WHERE Pos= @pPlek";
using (OleDbConnection connection = new OleDbConnection(connectionString))
using (OleDbCommand command = new OleDbCommand(queryString, connection))
{
try
{
command.Parameters.AddWithValue("@pPN", sPlayerName);
command.Parameters.AddWithValue("@plvl", iLevel);
command.Parameters.AddWithValue("@pdmg", iDamage);
command.Parameters.AddWithValue("@pPlek", iPos);
connection.Open();
command.ExecuteNonQuery();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
return sBack;
}
else if (sCalling == "2")//Download info from Database
{
queryString = "SELECT * FROM Scores";
using (OleDbConnection connection = new OleDbConnection(connectionString))
using (OleDbCommand command = new OleDbCommand(queryString, connection))
{
try
{
connection.Open();
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
{
sPos[iCounter] = reader[0].ToString();
sNames[iCounter] = reader[1].ToString();
sLevel[iCounter] = reader[2].ToString();
sDamage[iCounter] = reader[3].ToString();
iCounter++;
}
reader.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
queryString = "SELECT * FROM pokemonGood";
iCounter = 0;
using (OleDbConnection connection = new OleDbConnection(connectionString))
using (OleDbCommand command = new OleDbCommand(queryString, connection))
{
try
{
connection.Open();
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
{
sGPID[iCounter] = reader[0].ToString();
sGPName[iCounter] = reader[1].ToString();
sGA1[iCounter] = reader[2].ToString();
sGA2[iCounter] = reader[3].ToString();
sGA3[iCounter] = reader[4].ToString();
sGHPmin[iCounter] = reader[5].ToString();
sGHPmax[iCounter] = reader[6].ToString();
sGAmin[iCounter] = reader[7].ToString();
sGAmax[iCounter] = reader[8].ToString();
iCounter++;
}
reader.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
queryString = "SELECT * FROM pokemonBad";
iCounter = 0;
using (OleDbConnection connection = new OleDbConnection(connectionString))
using (OleDbCommand command = new OleDbCommand(queryString, connection))
{
try
{
connection.Open();
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
{
sBPID[iCounter] = reader[0].ToString();
sBPName[iCounter] = reader[1].ToString();
sBA1[iCounter] = reader[2].ToString();
sBA2[iCounter] = reader[3].ToString();
sBA3[iCounter] = reader[4].ToString();
sBHPmin[iCounter] = reader[5].ToString();
sBHPmax[iCounter] = reader[6].ToString();
sBAmin[iCounter] = reader[7].ToString();
sBAmax[iCounter] = reader[8].ToString();
iCounter++;
}
reader.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
for (k = 0; k <= 9; k++)
{
iLength = sNames[k].Length;
if (iLength < 20)
{
iLength = 20 - iLength;
while (iLength != 0)
{
sNames[k] = sNames[k] + " ";
iLength--;
}
}
}
return sBack;
}
else if (sCalling == "3")//Check if on scoreboard
{
iPlayerLevel = Convert.ToInt32(sGB);
iPlayerDamage = Convert.ToInt32(sType);
sNameInput = sNumber;
iLevel = Convert.ToInt32(sLevel[9]);
iDamage = Convert.ToInt32(sDamage[9]);
sPlayerName = sNames[9];
iNameSort = String.Compare(sPlayerName, sNameInput);
if ((iPlayerLevel > iLevel) || ((iPlayerLevel == iLevel) && (iPlayerDamage < iDamage)) || ((iPlayerLevel == iLevel) && (iPlayerDamage == iDamage) && (iNameSort > 0)))
{
sNames[9] = sNameInput;
sLevel[9] = Convert.ToString(iPlayerLevel);
sDamage[9] = Convert.ToString(iPlayerDamage);
for (t = 0; t <= 8; t++)
{
for (u = t + 1; u <= 9; u++)
{
iOne = Convert.ToInt32(sLevel[t]);
iTwo = Convert.ToInt32(sLevel[u]);
iOneD = Convert.ToInt32(sDamage[t]);
iTwoD = Convert.ToInt32(sDamage[u]);
if ((iOne < iTwo) || ((iOne == iTwo) && (iOneD > iTwoD)))
{
sTemp = sLevel[t];
sLevel[t] = sLevel[u];
sLevel[u] = sTemp;
sTemp = sNames[t];
sNames[t] = sNames[u];
sNames[u] = sTemp;
sTemp = sDamage[t];
sDamage[t] = sDamage[u];
sDamage[u] = sTemp;
}
if ((iOne == iTwo) && (iOneD == iTwoD))
{
sFirst = sNames[t];
sSecond = sNames[u];
iNameSort = String.Compare(sFirst, sSecond);
if (iNameSort > 0)
{
sTemp = sNames[t];
sNames[t] = sNames[u];
sNames[u] = sTemp;
}
}
}
}
sBack = "Congratulations you have reach the High Score board!!!\nGo to the High Scores to see your position.\n\n\nPress Enter to go back to main menu";
}
else
sBack = "Sorry you did not reach the High Score board.\nBetter luck next time!\n\n\nPress Enter to go back to main menu";
return sBack;
}
else //Send required info back
{
iPlaceHolder = Convert.ToInt32(sNumber);
if (sGB == "1")
{
if (sType == "1")
sBack = sGPID[iPlaceHolder];
else if (sType == "2")
sBack = sGPName[iPlaceHolder];
else if (sType == "3")
sBack = sGA1[iPlaceHolder];
else if (sType == "4")
sBack = sGA2[iPlaceHolder];
else if (sType == "5")
sBack = sGA3[iPlaceHolder];
else if (sType == "6")
sBack = sGHPmin[iPlaceHolder];
else if (sType == "7")
sBack = sGHPmax[iPlaceHolder];
else if (sType == "8")
sBack = sGAmin[iPlaceHolder];
else
sBack = sGAmax[iPlaceHolder];
}
else if (sGB == "2")
{
if (sType == "1")
sBack = sBPID[iPlaceHolder];
else if (sType == "2")
sBack = sBPName[iPlaceHolder];
else if (sType == "3")
sBack = sBA1[iPlaceHolder];
else if (sType == "4")
sBack = sBA2[iPlaceHolder];
else if (sType == "5")
sBack = sBA3[iPlaceHolder];
else if (sType == "6")
sBack = sBHPmin[iPlaceHolder];
else if (sType == "7")
sBack = sBHPmax[iPlaceHolder];
else if (sType == "8")
sBack = sBAmin[iPlaceHolder];
else
sBack = sBAmax[iPlaceHolder];
}
else
{
if (sType == "1")
sBack = sPos[iPlaceHolder];
else if (sType == "2")
sBack = sNames[iPlaceHolder];
else if (sType == "3")
sBack = sLevel[iPlaceHolder];
else
sBack = sDamage[iPlaceHolder];
}
return sBack;
}
}
静态字符串数据库(字符串缩放、字符串sGB、字符串sType、字符串sNumber)
{
字符串sBack=“”;
字符串八字名称、sNameInput、sTemp、sFirst、sSecond;
国际在线、国际在线、国际在线、国际在线、国际在线、国际在线、国际在线、国际在线、国际在线、国际在线、国际在线、国际在线、国际在线、国际在线、国际在线、国际在线、国际在线、国际在线、国际在线、国际在线持有人;
i计数器=0;
字符串[]sPos=新字符串[10],sDamage=新字符串[10],sLevel=新字符串[10],sNames=新字符串[10];
字符串[]sGPID=新字符串[6],sGPName=新字符串[6],sGA1=新字符串[6],sGA2=新字符串[6],sGA3=新字符串[6],sGHPmin=新字符串[6],sGHPmax=新字符串[6],sGAmin=新字符串[6],sGAmax=新字符串[6];
字符串[]sBPID=新字符串[20],sBPName=新字符串[20],sBA1=新字符串[20],sBA2=新字符串[20],sBA3=新字符串[20],sBHPmin=新字符串[20],sBHPmax=新字符串[20],sBAmin=新字符串[20],sBAmax=新字符串[20];
字符串连接字符串=@“Provider=Microsoft.Jet.OLEDB.4.0;“+@”数据源=PokemonConsole.mdb”;
串查询串;
if(sCalling==“1”)//从数据库上载信息
{
对于(iUpdate=0;iUpdate 0)))
{
sNames[9]=sNameInput;
sLevel[9]=Convert.ToString(iPlayerLevel);
sDamage[9]=Convert.ToString(iPlayerDamage);
对于(t=0;t0)
{
sTemp=蜗牛[t];
sNames[t]=sNames[u];
sNames[u]=sTemp;
}
}
}
}
sBack=“祝贺您进入高分榜!!!\n转到高分榜查看您的位置。\n\n\n按Enter键返回主菜单”;
}
其他的
sBack=“很抱歉,您没有到达高分板。\n祝您下次好运!\n\n\n按Enter键返回主菜单”;
返回sBack;
}
else//将所需信息发送回
{
iPlaceHolder=转换为32(sNumber);
如果(新加坡元=“1”)
{
如果(sType==“1”)
sBack=sGPID[iPlaceHolder];
否则如果(sType==“2”)
sBack=sGPName[iPlaceHolder];
否则如果(sType==“3”)
sBack=sGA1[iPlaceHolder];
否则如果(sType==“4”)
sBack=sGA2[iPlaceHolder];
否则如果(sType==“5”)
sBack=sGA3[iPlaceHolder];
否则如果(sType==“6”)
sBack=sGHPmin[iPlaceHolder];
否则如果(sType==“7”)
sBack=sGHPmax[iPlaceHolder];
否则如果(sType==“8”)
sBack=sGAmin[iPlaceHolder];
其他的
sBack=sGAmax[iPlaceHolder];
}
否则如果(新加坡元=“2”)
{
如果(sType==“1”)
sBack=sBPID[iPlaceHolder];
否则如果(sType==“2”)
sBack=sBPName[iPlaceHolder];
否则如果(sType==“3”)
sBack=sBA1[iPlaceHolder];
否则如果(sType==“4”)
sBack=sBA2[iPlaceHolder];
否则如果(sType==“5”)
sBack=sBA3[iPlaceHolder];
否则如果(sType==“6”)
sBack=sBHPmin[iPlaceHolder];
否则如果(sType==“7”)
sBack=sBHPmax[iPlaceHolder];
否则如果(sType==“8”)
sBack=sBAmin[iPlaceHolder];
其他的
sBack=sBAmax[iPlaceHolder];
}
其他的
{
如果(sType==“1”)
sBack=SPO[iPlaceHolder];
否则如果(sType==“2”)
sBack=sNames[iPlaceHolder];
否则如果(sType==“3”)
sBack=sLevel[iPlaceHolder];
其他的
sBack=sDamage[iPlaceHolder];
}
返回sBack;
}
}
面向对象基础:受保护/公共/私有类成员(非方法成员)您可以通过将变量声明为类的字段而不是方法的局部变量来实现这一点。这没有帮助。同样的情况也会发生。@phoog我将它添加到顶部,然后它给了我一个对象引用错误。经过一些研究之后,我在数组(在类中)前面添加了public
,并添加了Program p=new Program()代码>至th