текстовое поле или код не чувствительны к регистру - PullRequest
0 голосов
/ 26 ноября 2009

Я ввожу имя в текстовое поле, например. «Джон» и сохранить его в базе данных, что он делает, затем я снова введите «Джон», который он не сохраняет. Но если я введу "Джон", он снова сохранит это ... Мне нужно, чтобы он не спас Джон и наоборот.

хорошо, так что это текстовое поле, которое тихо нормально:

 <asp:TextBox ID="TextBox2" runat="server" Width="80%" BorderColor="Black" 
                    MaxLength="127"></asp:TextBox>

и вот код:

int k= 0
SqlConnection dataConnection = new SqlConnection();
            dataConnection.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
            SqlCommand dataCommand =
                    new SqlCommand("select Name from Groups", dataConnection);


            ArrayList names = new ArrayList();
            dataConnection.Open();
            SqlDataReader rdr = dataCommand.ExecuteReader();
            while (rdr.Read())
            {
                names.Add(rdr.GetString(0));
            }
            dataCommand.Dispose();
            dataConnection.Dispose();

            //to check if name already used..
            for (int i = 0; i < names.count; i++)
            {
                if (Name != (string)names[i])
                {
                    k = 1;

                }
                else
                {
                    Label1.Text = "Name is already present";
                    Label1.Visible = true;
                    k = 0;
                    break;
                }
            }
            if (k == 1)
            {
                Insertname();
            }

Ответы [ 4 ]

1 голос
/ 26 ноября 2009
if (Name != (string)names[i])
{
    ...
}

может стать

if (!Name.Equals((string)names[i], StringComparison.InvariantCultureIgnoreCase))
{
    ...
}
1 голос
/ 26 ноября 2009

Время для холодного душа.

Во-первых, если вы хотите проверить, существует ли имя, и вставить его, если его нет, вы должны проверить его на сервере, при условии надлежащей изоляции и контроля транзакций. То, что у вас есть, помимо того, что вы ужасно неэффективны, сравнивая имя с массивом на клиенте , неверно, потому что оно проверяет, не существовало ли имя (прошедшее время). Он не учитывает параллелизм, и в результате два запроса могут попытаться вставить одно и то же имя.

Во-вторых, если вам нужна уникальность в базе данных, вы применяете ее с помощью ограничений таблицы. Если вам нужно уникальное имя без учета регистра, то вы должны добавить ограничение UNIQUE к вашей таблице в столбце Имя и убедиться, что в столбце используется регистр без учета регистра .

1 голос
/ 26 ноября 2009

Один из способов сделать это - каждый раз менять его на соответствующий регистр, прежде чем представлять его в базу данных.

Чтобы привести его к правильному регистру, вы можете попробовать метод ToTitleCase() в System.Globalization.TextInfo.

Обратите внимание, что ToTitleCase() обеспечивает произвольное поведение обсадной колонны, а не лингвистически правильное поведение. Например, «Война и мир» должны иметь строчную букву a на английском языке. Это особенно проблематично для таких случаев, как О'Брайен, который ToTitleCase будет выводить как О'Брайен.

В конце концов, может быть проще позволить базе данных сохранить объект.

0 голосов
/ 26 ноября 2009

Почему бы просто не вводить прописные (или строчные) в логике сравнения:

if (Name.ToUpper ()! = (Строка) names [i] .ToUpper)

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...