Чтение sql по одной строке за раз c # - PullRequest
0 голосов
/ 26 июня 2018
public void addintovisitor()
{
string companyname = (txtvisitor.Text.ToUpper());
DataSet result = new DataSet();
visitorcompany vc = new visitorcompany();
string Location1 = Convert.ToString(Session["location"]);
vc.checksamecompanyname(ref result, Location1);
for (int i = 0; i < result.Tables["details"].Rows.Count; i++)
{
if (companyname == result.Tables["details"].Rows[i]["Companyname"].ToString())
{

}
else
{
 string strConn = Convert.ToString(ConfigurationManager.ConnectionStrings["connectionstring"]);
 SqlConnection conn = new SqlConnection(strConn);
 SqlCommand cmd = new SqlCommand(
                  "INSERT INTO tblVisitorcompany ([CompanyName], " +
                  "[Location1]) " +
                  "VALUES(@CompanyName, @Location1)", conn);

                cmd.Parameters.AddWithValue("@Companyname", companyname);
                cmd.Parameters.AddWithValue("@Location1", Location1);
                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();
 }
 }
 }

Мой посетителькомпании класс:

public int checksamecompanyname(ref DataSet result, string Location1)
{        
  string strConn = Convert.ToString(
  ConfigurationManager.ConnectionStrings
  ["connectionstring"]);
  SqlConnection conn = new SqlConnection(strConn);
  SqlCommand cmd = new SqlCommand
  ("select Companyname from tblVisitorcompany where Location1 ='" + Location1 + "'", conn);
  SqlDataAdapter da = new SqlDataAdapter(cmd);
  conn.Open();
  da.Fill(result, "details");
  conn.Close();
  //Return 0 when no error occurs.
  return 0;
  }

Я пытаюсь искать по одной строке за раз, чтобы проверить, есть ли в таблице sql одно и то же название компании. если уже существует название компании, программа ничего не сделает. Если это новое название компании, программа добавит название компании в таблицу sql. Однако при добавлении нового названия компании программа будет добавлена ​​более одного раза. Может кто-нибудь, пожалуйста, помогите мне отредактировать мою программу так, чтобы она добавила только одно новое название компании. Большое спасибо.

Ответы [ 3 ]

0 голосов
/ 26 июня 2018

Проверьте, существует ли значение, , затем добавьте его, если нет.
Простое изменение в вашем коде:

bool valueFound = false;

// check if the value exists
for (int i = 0; i < result.Tables["details"].Rows.Count; i++)
{
    if (companyname == result.Tables["details"].Rows[i]["Companyname"].ToString())
    {
        // it exists so we exit the loop
        valueFound = true;
        break;
    }
}

// we have looped all the way without finding the value, so we can insert
if(!valueFound)
{
    string strConn = Convert.ToString(ConfigurationManager.ConnectionStrings["connectionstring"]);
    SqlConnection conn = new SqlConnection(strConn);
    SqlCommand cmd = new SqlCommand(
          "INSERT INTO tblVisitorcompany ([CompanyName], " +
          "[Location1]) " +
          "VALUES(@CompanyName, @Location1)", conn);

     cmd.Parameters.AddWithValue("@Companyname", companyname);
     cmd.Parameters.AddWithValue("@Location1", Location1);
     conn.Open();
     cmd.ExecuteNonQuery();
     conn.Close();
}

Конечно, вы можете проверить, существует ли значение более эффективным способом, но это должно по крайней мере решить вашу конкретную проблему.

0 голосов
/ 26 июня 2018
using( var connection = new SqlConnection( "my connection string" ) ) {
using( var command = connection.CreateCommand() ) {
    command.CommandText = "SELECT Column1, Column2, Column3 FROM myTable";

    connection.Open();
    using( var reader = command.ExecuteReader() ) {
        var indexOfColumn1 = reader.GetOrdinal( "Column1" );
        var indexOfColumn2 = reader.GetOrdinal( "Column2" );
        var indexOfColumn3 = reader.GetOrdinal( "Column3" );

        while( reader.Read() ) {
            var value1 = reader.GetValue( indexOfColumn1 );
            var value2 = reader.GetValue( indexOfColumn2 );
            var value3 = reader.GetValue( indexOfColumn3 );

            // now, do something what you want
        }
    }
    connection.Close();
}
0 голосов
/ 26 июня 2018

не используйте companyname в качестве аргумента команды вставки, поскольку она остается неизменной в цикле for. Используйте result.Tables["details"].Rows[i]["Companyname"].ToString() вместо:

...
cmd.Parameters.AddWithValue("@Companyname", result.Tables["details"].Rows[i]["Companyname"].ToString());
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...