2015-10-11 7 views
1

У меня есть .txt файл, который устанавливается следующим образом:Индекс находился вне границ массива в - C#

1 Username Email MD5Password PlainPassword 

Теперь я хочу, чтобы поместить этот .txt в SQL, так что у меня есть этот код:

string[] SQL = line.Split(' '); 

dynamic ID = SQL[0]; 
dynamic Username = SQL[1]; 
dynamic Email = SQL[2]; 
dynamic Password = SQL[3]; 
dynamic PlainPassword = SQL[4]; 

string lines = "INSERT INTO `dbsearch`(`username`, `password`, `email`, `extra`) VALUES ('" + Username + "', '" + Password + "', '" + Email + "', '" + PlainPassword + "')"; 

Но некоторые строки в моем .txt файл оленьей коже есть пароль или plainpassword, так что я получаю эту ошибку:

Exception thrown: 'System.IndexOutOfRangeException' in Search SQL Creator.exe 

Additional information: Index was outside the bounds of the array. 

Как я могу это исправить?

+1

Что не вы понимаете сообщение об ошибке? Вы получаете доступ к индексу, который находится за пределами вашего массива. Вы уверены, что у вас есть 5 элементов? –

+0

Вы можете запустить отладчик и добавить точку останова в первой строке. Пожалуйста, покажите содержимое «SQL» при выполнении. –

+0

Как я уже сказал, в большинстве случаев у меня есть 5 элементов, но иногда их нет. Так как я могу просто сделать его пустым, если нет элемента? – wtm

ответ

4

Если вы не уверены, есть ли у вас последний элемент, вы можете проверить, прежде чем доступ к ней внутри массива:

string[] sql = line.Split(' '); 

dynamic id = sql[0]; 
dynamic username = sql[1]; 
dynamic email = sql[2]; 
dynamic password = sql.Length >= 4 ? sql[3] : null; 
dynamic plainPassword = sql.Length == 5 ? sql[4] : null; 
+0

Это сработало хорошо! Танск за помощью. – wtm

+0

@MatthewDotcom Приветствую вас. –

0

Вы также можете использовать LINQ:

string[] sql = line.Split(' '); 

string id = sql[0]; 
string username = sql[1]; 
string email = sql[2]; 
string password = sql.Skip(3).FirstOrDefault(); 
string plainPassword = sql.Skip(4).FirstOrDefault(); 
+0

Это лишний раз перечислит коллекцию дважды. –

+0

@ ЮвалИцчаков - Возможно. В худшем случае, хотя это только для 7 + 2 элементов. Доступ к 9 элементам для получения 2 из массива вряд ли будет проблемой производительности. Кроме того, многие операторы LINQ признают, что они выполняют итерацию по массивам и осуществляют прямой доступ. – Enigmativity

Смежные вопросы