Принятие, к которому Вы присоединяетесь на столбцах без дубликатов, который является очень общим падежом:
внутреннее объединение A и B дает результат A, пересекают B, т.е. внутреннюю часть пересечение схемы Венна.
внешнее объединение A и B дает результаты объединения B, т.е. внешние части объединения схемы Венна.
Примеры
предположим у Вас есть две таблицы с отдельным столбцом каждый и данные следующим образом:
A B
- -
1 3
2 4
3 5
4 6
Примечание, которые (1,2) уникальны для A, (3,4), распространено, и (5,6) уникальны для B.
Внутреннее объединение
внутреннее объединение с помощью любого из эквивалентных запросов дает пересечение этих двух таблиц, т.е. этих двух строк, которые они имеют общего.
select * from a INNER JOIN b on a.a = b.b;
select a.*, b.* from a,b where a.a = b.b;
a | b
--+--
3 | 3
4 | 4
Левое внешнее объединение
А уехал, внешнее объединение даст все строки в A плюс любые общие строки в B.
select * from a LEFT OUTER JOIN b on a.a = b.b;
select a.*, b.* from a,b where a.a = b.b(+);
a | b
--+-----
1 | null
2 | null
3 | 3
4 | 4
Правильное внешнее объединение
внешнее объединение права А даст все строки в B плюс любые общие строки в A.
select * from a RIGHT OUTER JOIN b on a.a = b.b;
select a.*, b.* from a,b where a.a(+) = b.b;
a | b
-----+----
3 | 3
4 | 4
null | 5
null | 6
Полное внешнее объединение
А полное внешнее объединение даст Вам объединение A и B, т.е. всех строк в A и всех строк в B. Если что-то в A не имеет соответствующей данной величины в B, то часть B является пустой, и наоборот.
select * from a FULL OUTER JOIN b on a.a = b.b;
a | b
-----+-----
1 | null
2 | null
3 | 3
4 | 4
null | 6
null | 5
protected void TestSubmit_ServerClick(object sender, EventArgs e)
{
using (StreamWriter _testData = new StreamWriter(Server.MapPath("~/data.txt"), true))
{
_testData.WriteLine(TextBox1.Text); // Write the file.
}
}
Server.MapPath принимает виртуальный путь и возвращает абсолютный. "~" используется для преобразования в корень приложения.
protected void TestSubmit_ServerClick(object sender, EventArgs e)
{
using (StreamWriter w = new StreamWriter(Server.MapPath("~/data.txt"), true))
{
w.WriteLine(TextBox1.Text); // Write the text
}
}
Имейте в виду, что вам также нужно будет предоставить учетной записи IUSR доступ на запись для папки после загрузки на веб-сервер.
Лично я рекомендую не разрешать доступ для записи в корневую папку, если у вас нет для этого веской причины. Кроме того, вы должны быть осторожны, какие файлы вы разрешаете сохранять, чтобы случайно не позволить кому-либо писать свои собственные страницы ASPX.
Существуют такие методы, как WriteAllText
в классе File
для общих операций с файлами.
Используйте метод MapPath
, чтобы получить физический путь к файлу в вашем веб-приложении.
File.WriteAllText(Server.MapPath("~/data.txt"), TextBox1.Text);