[英]Index was outside the bounds of the array
在我的項目中,我正在上載一些文件SQL Server,當文件在表Table1中上載時,另一個函數將檢查表Table1中是否有文件,並通過從另一個函數中獲取隨機數或字符將表中的隨機數或字符插入到表Table2中它生成並以字符串形式返回它,現在我的問題是文件已正確上傳並保存在Table1中,但是當Table1與文件一起插入時,另一個插入隨機數/字符但引發異常的函數是我的代碼,
public class Upload : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
context.Response.Expires = -1;
try
{
HttpPostedFile postedFile = context.Request.Files["Filedata"];
string savepath = "";
string tempPath = "";
tempPath = System.Configuration.ConfigurationManager.AppSettings["FolderPath"];
savepath = context.Server.MapPath(tempPath);
string filename = postedFile.FileName;
string ext = Path.GetExtension(filename);
string contenttype = String.Empty;
switch (ext)
{
case ".doc":
contenttype = "application/vnd.ms-word";
break;
case ".docx":
contenttype = "application/vnd.ms-word";
break;
case ".pdf":
contenttype = "application/pdf";
break;
}
context.Response.StatusCode = 200;
byte[] b = ReadFile(postedFile);
ExamManagement.SP.QUESTIONPAPER_SP_UPLOAD(filename, contenttype,b).Execute();
trigger();
}
catch (SqlException exp)
{
if (exp.Message.Contains("PK_answerkey"))
{
context.Response.Write("File Already Uploaded.....");
}
}
catch (Exception ex)
{
context.Response.Write("Error: " + ex.Message);
}
}
public bool IsReusable {
get {
return false;
}
}
private byte[] ReadFile(HttpPostedFile fObj2)
{
byte[] data = new Byte[fObj2.ContentLength];
fObj2.InputStream.Read(data, 0, fObj2.ContentLength);
return data;
}
protected void ClientMessaging(string msg)
{
String script = String.Format("alert('{0}');", msg);
Anthem.Manager.IncludePageScripts = true;
}
protected void trigger()
{
try
{
DataSet ds = ExamManagement.SP.Questionpaper_SP_Selectall().GetDataSet();
if (ds.Tables[0].Rows.Count > 0)
{
string a = RandomNumberGenerator(4);
string b = RandomNumberGenerator(4);
string c = RandomNumberGenerator(4);
ExamManagement.SP.Passkey_insert(a, b, c).Execute();
}
}
catch
{
throw; **// Exception Was Thrown Here**
}
}
public static string RandomNumberGenerator(int length)
{
System.Security.Cryptography.RandomNumberGenerator rng = System.Security.Cryptography.RandomNumberGenerator.Create();
char[] chars = new char[length];
//based on your requirment you can take only alphabets or number
string validChars = "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXzZ";
for (int i = 0; i < length; i++)
{
byte[] bytes = new byte[1];
rng.GetBytes(bytes);
Random rnd = new Random(bytes[0]);
chars[i] = validChars[rnd.Next(0, 61)];
}
return (new string(chars));
}
}某些機構可以幫助我嗎...預先感謝...。代碼的這一部分出錯了...
protected void trigger()
{
try
{
DataSet ds = ExamManagement.SP.Questionpaper_SP_Selectall().GetDataSet();
if (ds.Tables[0].Rows.Count > 0)
{
string a = RandomNumberGenerator(4);
string b = RandomNumberGenerator(4);
string c = RandomNumberGenerator(4);
ExamManagement.SP.Passkey_insert(a, b, c).Execute();
}
}
catch
{
throw; **// Exception Was Thrown Here**
}
}
public static string RandomNumberGenerator(int length)
{
System.Security.Cryptography.RandomNumberGenerator rng = System.Security.Cryptography.RandomNumberGenerator.Create();
char[] chars = new char[length];
//based on your requirment you can take only alphabets or number
string validChars = "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXzZ";
for (int i = 0; i < length; i++)
{
byte[] bytes = new byte[1];
rng.GetBytes(bytes);
Random rnd = new Random(bytes[0]);
chars[i] = validChars[rnd.Next(0, 61)];
}
return (new string(chars));
}
Passkey_insert SP是,
Create Procedure Passkey_insert
(
@red varchar(100),
@green varchar(100),
@blue varchar(100)
)
as
BEGIN
BEGIN TRY
Insert into Passkeys(Red,Green,Blue) values (@red,@green,@blue)
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK
DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int
SELECT @ErrMsg = ERROR_MESSAGE(),
@ErrSeverity = ERROR_SEVERITY()
RAISERROR(@ErrMsg, @ErrSeverity, 1)
END CATCH
END
您的有效validChars
長度為50,但這里是0到61之間的隨機數:
chars[i] = validChars[rnd.Next(0, 61)];
更改為:
chars[i] = validChars[rnd.Next(0, 51)];
您將有效字符數設置為50個字符的數組,然后使用rnd.Next(0,61)獲取該數組的索引。 根據定義,它可能超過有效字符的長度。
更改行:
chars[i] = validChars[rnd.Next(0, 61)];
...改為:
chars[i] = validChars[rnd.Next(0, validChars.Length)];
(請注意,Next()函數的第二個參數是互斥的,因此您將使用0到49的范圍,與您的數組匹配)
您的validChar數組只有50個字符寬,但是您正在使用validChars [rnd.Next(0,61)]查找一個char字符
更改
chars[i] = validChars[rnd.Next(0, 61)];
至
chars[i] = validChars[rnd.Next(0, validChars.Length)];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.